在6-7年的java学习之后,我学习了C++,我遇到了一个问题,在这个片段中,它不是"concat“,而是删除输入时的n个字符。
#include <iostream>
int main()
{
int id;
std::cin >> id;
std::cout << "Hello world!" + id << std::endl;
return 0;
}
输出不是
Hello world!*input*
而是将输入中的n个字符减去"hello world“。如果我给出8,输出将是rld!如果有人能解释的话..。我会很高兴听到的!
发布于 2015-06-02 13:41:23
这就是C/C++中指针算法的工作原理。
基本上,"Hello world!"
只是一个const char*
,它的+
运算符就像一个指针一样在它上工作。这意味着,例如,如果将3
添加到它,那么它将指向开始后的3个字符,而不是指向"Hello world"
的开头。如果你打印出来,你就会得到llo world
。
所以你不是在做字符串连接。
如果您只想打印这些内容,可以使用operator <<
并执行如下操作:
std::cout << "Hello world!" << id << std::endl;
如果您需要一个真正像字符串一样工作的字符串,可以考虑使用标准库中的std::string
,或者如果您使用类似于Qt的内容,则可以使用QString
。
使用现代编译器(支持C++11),您可以使用std::to_string
从int
创建字符串,然后可以这样做:
std::string s = "Hello world!";
int i;
std::cin >> i;
s += std::to_string(i);
std::cout << s;
如果您考虑认真从事C++应用程序开发,可以考虑使用Qt或boost这样的库,这会使您的工作更加轻松,尽管很好地了解标准库也是一件好事。:)
发布于 2015-06-02 13:42:35
“你好世界!”在C( C++是基于它的)中,类型为const char[],然后当您尝试使用指针算法时,它将被视为const *。换句话说,它是一个内存地址,指向位置OxDEAD0000,其中包含字符"Hello!“和一个空终结者。
"Hello world!" + id
因此,将(如果id为8)解析为0xDEAD 0008。
然后,流操作符对该地址的内容进行操作,该地址将8个字符偏移到"Hello world!“,即"rld!”。
发布于 2015-06-02 13:43:12
您可以使用operator<<
std::cout << "Hello world!" << id << std::endl;
或者,如果您可以访问C++11,则可以使用std::to_string
std::cout << "Hello world!" + std::to_string(id) << std::endl;
https://stackoverflow.com/questions/30597793
复制相似问题