嗨我正在尝试制作一个以和作为输入的程序让我们说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 ++程序,我还是初学者
感谢您的帮助!
答案 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;
}