【问题标题】:Printing character after addition as string in C++在C ++中添加为字符串后打印字符
【发布时间】:2020-06-24 19:12:41
【问题描述】:

我正在尝试将'd' 打印为 C++ 中的字符串。

string s = to_string((char)('a'+ 3));

cout << s << endl;

预期输出:"d"

实际输出:"100"

我无法理解这种行为。 任何帮助将不胜感激。

【问题讨论】:

  • 请注意,to_string 没有覆盖字符,这就是为什么你的字符被提升为int,然后转换为字符串。

标签: c++ string c++14 c++17


【解决方案1】:

std::to_string 是将整数浮点 值转换为字符串的函数。你不应该在这种情况下使用它。

简单使用

std::cout << 'a' + 3 << std::endl;

或者

char c = 'a' + 3;
std::cout << c << std::endl;

或者如果你真的希望将结果保存为字符串:

std::string s = std::string{'a' + 3};
std::cout << s << std::endl;

【讨论】:

    【解决方案2】:

    你需要的是

    std::string s( 1, 'a'+ 3 );
    

    std::string s;
    s +=  'a'+ 3;
    

    或者例如喜欢

    std::string s( 1, 'a' );
    s.back() +=  3;
    

    (有几种方法可以得到预期的结果)

    至于这份声明

    string s = to_string((char)('a'+ 3));
    

    然后表达式 ( char )('a' + 3 ) 被隐式转换为 int 类型(由于整数提升和所选重载函数 std::to_string 的参数的类型),表示为调用 std::to_string 之后的字符串..

    【讨论】:

    • 我期待 ('a' + 3 ) 给出结果 'd'。由于 to_string 方法,此行为是否被覆盖?
    • @Bhawan:'a' + 3int 类型。 (char)('a' + 3) 在使用 ASCII 编码的平台上确实是 'd'。 Vlad 提出的观点是,to_string 没有过载,它需要char;最好的一个是带int 的那个。
    • @Bhawan 重载的 to_string 函数集将其具有整数类型的参数转换为字符串。所以即使你写了 ( char )( 'a' + 3 ),这个表达式也会根据所选的重载函数 to_string 转换为整数类型。该函数用于将数字转换为字符串。
    • 请注意std::string 有一个operator= 接受char,所以s += 'a' + 3; 可以是s = 'a' + 3;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2011-11-16
    相关资源
    最近更新 更多