提问者:小点点

为什么给字符串赋值一个整数会导致空格?


我在写Fizz Buzz的时候遇到了一个意想不到的互动。如果我执行std::cout<,它会自动将I(int)转换为字符串并打印出来?但是如果将i赋值给一个字符串变量,它会打印一个空白?我设法通过使用std::to_string解决了这个问题,但我只是想知道为什么打印to_print会打印一个空白,而不是一个整数或抛出某种错误?

#include <iostream>
#include <string>

int main() {
    for (int i = 1; i <= 10; i++) {
        // prints i
        std::cout << i;
    }
    
    std::cout << std::endl;
    
    for (int i = 1; i <= 10; i++) {
        std::string to_print;
        to_print = i;
        // prints blank rather than i
        std::cout << to_print;
    }
}

共2个答案

匿名用户

没有String::Operator=(int),但有String::Operator=(char),它被选为最佳可行候选项。

因此,您将代码为1..10的单个字符分配给字符串,这些字符显然会被您的终端打印为空白。

尝试赋值65,它应该打印A

匿名用户

变量i将根据其值和ASCII表转换为一个字符。前几个字符不可见。

将代码更改为从49开始迭代,这是字符“0”的十进制值:

for (int i = 49; i <= 57; i++) {
    std::string to_print;
    to_print = i;
    std::cout << to_print;
}

打印:123456789