我正在尝试弄清楚如何按字母顺序排列一个包含单词和数字的字符串。正如您下面所看到的,我已经尝试使用
编辑:
样本输入#1:
到目前为止,我的代码看起来是这样的:
isdigit
但是一些数字是负数,所以我的代码总是不正确的。此外,我的代码将字符串拆分为子字符串,这些子字符串按照字母顺序排序,但我不知道如何单独按字母顺序排序所有单词,将它们放回它们在向量中的位置,然后单独按字母顺序排序所有数字,并将它们放回它们在向量中的位置。谁能帮帮我?编辑:
样本输入#1:
4 dog 1 -3 0 cat 3
样例输出 #1:
-3 cat 0 1 3 dog 4
样例输入 #2:
tom 4 0 9 kid pie 1
示例输出 #2:
kid 0 1 4 pie tom 9
到目前为止,我的代码看起来是这样的:
vector<string> numbers;
string str;
string x;
getline (cin, str);
stringstream ss(str);
while (ss >> x){
numbers.push_back(x);
}
if (numbers.size()==1){
cout << numbers[0] << endl;
return 0;
}
vector<int> results(numbers.size());
for (int i=0;i<numbers.size();i++){
char *a=new char[numbers[i].size()+1];
a[numbers[i].size()]=0;
memcpy(a,numbers[i].c_str(),numbers[i].size());
if(isdigit(*a)==0)
{
results[i]=1;
} else{
results[i]=0;
}
}
int j=0;
while (j<numbers.size()){
int k=j+1;
while (k<numbers.size()){
while (results[j]==results[k]){
sort(numbers.begin()+j,numbers.begin()+k+1);
k++;
}
j=k;
k=numbers.size();
}
if(j==numbers.size()){
for (int i=0; i<numbers.size();i++){
cout << numbers[i] << " ";
}
j++;
}
}
char *a=new char[numbers[i].size()+1];
这是为什么? - PaulMcKenziestd::string
呢?完全没有必要做你正在做的事情。此外,你还引入了内存泄漏问题。string a = numbers[i];
- PaulMcKenzie