我正在通过解决问题来学习C ++。 我需要制作一个程序,通过将数字移到另一边来对用户的推算文本进行排序。
例如:字符串“a13Bc1de2F G.!Hi8Kl90” - 应该是这样的:“aBcdeFGHiKl。!1312890”
我只设法创建一个按字母顺序对文本进行排序的程序。 我想得到一些指导。我认为我需要检查每个字符(如果是字母或数字)并移动到其他字符串,但我不确定如何制作它。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str1;
cout << " Hi user! \n"
"Imput some mess here: \n";
cin >> str1;
sort(str1.begin(), str1.end());
cout << "Now it's not a mess : \n" << str1 << endl;
system("pause");
return 0;
}
答案 0 :(得分:0)
下面的代码应该做你想要的。我改变了尽可能少的原始代码。
主力函数是move_digits_to_right
。我们使用isdigit
库中的cctype
函数,该函数检查给定字符是否为数字。如果是这样,我们会将其附加到digitVec
向量,否则,我们会将其附加到nonDigitVec
向量。最后,我们返回一个以非数字字符开头的字符串,后跟数字字符,同时保留它们在原始字符串中的出现顺序。
在main
功能中,我已将cin >> str1
行更改为getline(cin, str)
。否则,对于"a13Bc1de2F G.! Hi8Kl90"
的示例输入,只有"a13Bc1de2F"
部分会被读入str1
。使用getline(cin, str)
可以让我们阅读整行输入。
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
string move_digits_to_right(const string& s)
{
vector<char> digitVec, nonDigitVec;
int len = (int) s.size();
for (int i = 0; i < len; i++) {
if (isdigit(s[i])) {
digitVec.push_back(s[i]);
} else {
nonDigitVec.push_back(s[i]);
}
}
return string(nonDigitVec.begin(), nonDigitVec.end()) +
string(digitVec.begin(), digitVec.end());
}
int main()
{
string str1, output;
cout << " Hi user! \n"
"Imput some mess here: \n";
getline(cin, str1);
output = move_digits_to_right(str1);
cout << "Now it's not a mess : \n" << output << endl;
system("pause");
return 0;
}