c ++将数字移到一边,将字母移到另一边

时间:2013-12-13 01:00:21

标签: c++ visual-studio-2013

我正在通过解决问题来学习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;
}

1 个答案:

答案 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;
}