用c ++排序给我一个空白输出

时间:2016-07-19 15:23:12

标签: c++

嗨我正在尝试制作一个以和作为输入的程序让我们说1 + 2 + 3 + 2 + 2 + 1并且必须将总和排序为1 + 1 + 2 + 2 + 2 + 3

这是代码

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

int main() {
    string s;
    char w[100];
    char x[100];
    cin>>s;
//moving string s to array w to remove the '+' charachter for sorting
for (int i=0; i>s.size() ;i++){
    if (s.at(i) = '+')continue;
    else s.at(i) == w[i];
}
//sorting array w
sort(w,w+100);
//moving array w to array x and re-adding the '+' after sorting
for (int y=0; y > s.size();y++){
    w[y]==x[y];
    x[y+1]=='+';
}
cout<<x;

return 0;

}

但是当我运行它时,它会给我一个空白输出 这是我第一次参加c ++程序,我还是初学者

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我可以看到你对语言不熟悉,因为你对基本概念缺乏了解。 我会先给你一些关于你的错误的提示和解释,然后我会给你一个更合适的解决方案。

首先,尝试避免像使用w和x一样使用C样式的数组。由于没有边界检查,它们容易出错,请改为使用std :: vector或std :: array。

==和=不一样!比较两件事时使用==,而=用于将右侧分配给左侧。

你的循环完全错误,使用

for (int i=0; i>s.size() ;i++)

永远不会进入循环。使用i&lt; s.size()当然。我还建议使用++ i而不是i ++,但这并不重要。

你的“代码思考”有时也很奇怪

for (int i=0; i>s.size() ;i++){
    if (s.at(i) = '+')continue;
    else s.at(i) == w[i];
}

(不关心&gt;和=错误),为什么不检查它是不是'+'而不是继续然后做某事?

此代码应该在逻辑上

for (int i=0; i>s.size() ;i++){
    if (s.at(i) != '+') s.at(i) == w[i];
}

最后但并非最不重要的是,尽量保持一致。首先使用i作为循环变量,第二次使用y。并不重要,但编码时的一致性总是很好。

我为您的问题快速解决了问题:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;    
int main()
{
    string input;
    cin >> input;

    vector<int> nrs = vector<int>(); //initialising this is not really needed
    for (char c : input) //range based for loop, prevents mistakes with indices
    {
        if (c != '+')
        {
            nrs.push_back(c - '0'); // a char minus '0' gives the numerical value
        }
    }

    sort(nrs.begin(), nrs.end());

    string answer;
    for (int nr : nrs) //range based for loop again
    {
        answer += to_string(nr); //use to_string to convert an int to a string

        if (nr != nrs.back()) //to avoid adding the '+' after the last character
        {
            answer += '+';
        }
    }
    cout << answer << endl;

    return 0;
}