首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在C++中,当我将字符串与'+‘连接起来,就像它不连接,但删除字符串的第一个字符

为什么在C++中,当我将字符串与'+‘连接起来,就像它不连接,但删除字符串的第一个字符
EN

Stack Overflow用户
提问于 2015-06-02 13:39:49
回答 3查看 134关注 0票数 0

在6-7年的java学习之后,我学习了C++,我遇到了一个问题,在这个片段中,它不是"concat“,而是删除输入时的n个字符。

代码语言:javascript
运行
复制
#include <iostream>
int main()
{
    int id;
    std::cin >> id;
    std::cout << "Hello world!" + id << std::endl;
    return 0;
}

输出不是

代码语言:javascript
运行
复制
Hello world!*input*

而是将输入中的n个字符减去"hello world“。如果我给出8,输出将是rld!如果有人能解释的话..。我会很高兴听到的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-02 13:41:23

这就是C/C++中指针算法的工作原理。

基本上,"Hello world!"只是一个const char*,它的+运算符就像一个指针一样在它上工作。这意味着,例如,如果将3添加到它,那么它将指向开始后的3个字符,而不是指向"Hello world"的开头。如果你打印出来,你就会得到llo world

所以你不是在做字符串连接。

如果您只想打印这些内容,可以使用operator <<并执行如下操作:

代码语言:javascript
运行
复制
std::cout << "Hello world!" << id << std::endl;

如果您需要一个真正像字符串一样工作的字符串,可以考虑使用标准库中的std::string,或者如果您使用类似于Qt的内容,则可以使用QString

使用现代编译器(支持C++11),您可以使用std::to_stringint创建字符串,然后可以这样做:

代码语言:javascript
运行
复制
std::string s = "Hello world!";
int i;
std::cin >> i;
s += std::to_string(i);
std::cout << s;

如果您考虑认真从事C++应用程序开发,可以考虑使用Qt或boost这样的库,这会使您的工作更加轻松,尽管很好地了解标准库也是一件好事。:)

票数 6
EN

Stack Overflow用户

发布于 2015-06-02 13:42:35

“你好世界!”在C( C++是基于它的)中,类型为const char[],然后当您尝试使用指针算法时,它将被视为const *。换句话说,它是一个内存地址,指向位置OxDEAD0000,其中包含字符"Hello!“和一个空终结者。

代码语言:javascript
运行
复制
"Hello world!" + id 

因此,将(如果id为8)解析为0xDEAD 0008。

然后,流操作符对该地址的内容进行操作,该地址将8个字符偏移到"Hello world!“,即"rld!”。

票数 2
EN

Stack Overflow用户

发布于 2015-06-02 13:43:12

您可以使用operator<<

代码语言:javascript
运行
复制
std::cout << "Hello world!" << id << std::endl;

或者,如果您可以访问C++11,则可以使用std::to_string

代码语言:javascript
运行
复制
std::cout << "Hello world!" + std::to_string(id) << std::endl;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30597793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档