无法使用cout <<方法()来打印字符串;其中method()返回一个字符串

时间:2018-08-15 06:40:09

标签: c++ c++11

以下是我的代码

#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;
}

但这是我的输出,这些看起来奇怪的方形符号是什么。 enter image description here

不应打印字符串,因为每次迭代都会添加一个字符。

5 个答案:

答案 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。 如果可以的话,也请避免使用{}。它降低了代码复杂度并提高了可读性