【发布时间】:2016-02-27 06:11:35
【问题描述】:
我试图弄清楚如何对包含单词和数字的单个字符串进行字母排序。正如您在下面看到的,我尝试使用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];为什么?? -
刚刚提供了一些示例输入和输出。
-
@Jeremy 你为什么不直接使用
std::string?绝对没有必要做你正在做的事情。此外,您还引入了内存泄漏。string a = numbers[i];
标签: c++ string algorithm vector