以下是我的代码
#include <iostream>
#include <string>
using namespace std;
string m(int x) {
string h="";
char q;
for(int i=0;i<x;i++) {
q=i;
h +=q;
}
return h;
}
int main() {
int x;
cin >> x;
cout << m(x) << endl;
return 0;
}
不应打印字符串,因为每次迭代都会添加一个字符。
答案 0 :(得分:4)
您正在将整数与字符串混合。要连接字符串,首先必须将一个字符int转换为字符串。请尝试以下代码:
#include <iostream>
#include <string>
using namespace std;
string m(int x) {
string h="";
char q;
for(int i=0;i<x;i++) {
q=i;
h += std::to_string(q);
}
return h;
}
int main() {
int x;
cin >> x;
cout << m(x) << endl;
return 0;
}
答案 1 :(得分:3)
您的终端可能试图将字符串解释为ASCII或UTF8。无论哪种方式,大多数值最多为23的字符都将是不可打印的控制字符。
如果您从33(而不是0)开始循环,则会获得更合理的输出。
答案 2 :(得分:1)
字符串是字符串,整数是整数。不要把它们混在一起,不要指望魔术。
尝试一下:
h += std::to_string(q);
答案 3 :(得分:0)
for循环的第二行应该是这样
h +=to_string((int)q);
答案 4 :(得分:0)
首先,您要做的实际上是打印从0到x的char。如果您在此处查询http://www.asciitable.com/的ascii表,则可以查看该字符的数字值,并查看它表示为char的含义。 如果无法显示,则控制台将其打印为您看到的正方形。
现在,您要说的是希望代码简短而精确。让我稍作修改。
#include <iostream>
#include <string>
using namespace std;
string m(int x) {
string returnVal;
for (int i = 0; i < x; i++)
returnVal += (char)i;
return returnVal;
}
int main() {
int input;
cin >> input;
cout << m(input) << endl;
return 0;
}
使用字母作为变量名是一种糟糕的做法。不惜一切代价避免这种情况。直观地命名您的变量,以便它们可以自我描述。这比拥有“简短”和“精确”的代码更为重要。
关于这一点,您不需要名为Q的其他变量。您可以将其直接类型转换为char。 如果可以的话,也请避免使用{}。它降低了代码复杂度并提高了可读性