【问题标题】:Why in C++ when i concat a string with '+' like it don't concat but remove first char of the string [duplicate]为什么在 C++ 中,当我用 '+' 连接字符串时,它不会连接而是删除字符串的第一个字符 [重复]
【发布时间】:2015-06-02 21:47:46
【问题描述】:

在学习了 6-7 年的 java 之后,我正在学习 C++,但我遇到了一个问题,在这个 sn-p 中,它不是“concat”而是删除 n 字符,因为输入已经给出..

#include <iostream>
int main()
{
    int id;
    std::cin >> id;
    std::cout << "Hello world!" + id << std::endl;
    return 0;
}

输出不是

Hello world!*input*

但它是减去“hello world”输入中给出的 n 字符。如果我给 8 输出将是 rld!。 如果有人可以解释这一点..我会很高兴听到! =)

【问题讨论】:

  • 指针算术
  • 所以..?请解释一下 XD =)
  • 你不能靠猜测来学习一门语言——买一本像样的书开始学习吧。
  • 你随意从&lt;&lt;切换到+。如果你能解释你为什么这样做,你就可以解释为什么这是一个问题。如果你做不到,你就不应该这样做。预约时间!
  • @PaulR - “小费”的“thanx”。

标签: c++ string concatenation cout


【解决方案1】:

这就是指针算法在 C/C++ 中的工作方式。

基本上,"Hello world!" 只是一个const char*,它的+ 操作符就像一个指针一样工作。这意味着,例如,如果您将 3 添加到它,那么它将指向开头之后的 3 个字符,而不是指向 "Hello world" 的开头。如果您打印它,您会得到llo world
所以你没有在那里进行字符串连接。

如果你只是想打印这些东西,你可以使用operator &lt;&lt; 并执行以下操作:

std::cout << "Hello world!" << id << std::endl;

如果您需要一个实际上像字符串一样工作的字符串,请考虑使用标准库中的 std::string,或者如果您使用 Qt 之类的东西,您可以使用 QString

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

std::string s = "Hello world!";
int i;
std::cin >> i;
s += std::to_string(i);
std::cout << s;

如果您考虑认真从事 C++ 应用程序开发,请考虑使用 Qt 或 boost 之类的库,这会使您的工作变得更加轻松,尽管熟悉标准库也是一件好事。 :)

【讨论】:

  • 然后,连接一个字符串,我应该使用一些方法.. 对吗?
  • wooow.. 我像个白痴一样跌倒了.. XDthanx 非常 =)
  • 那个,或者干脆不使用裸字符串文字 ("abc") 而是使用std::strings。它们更类似于 Java 字符串。
  • @AndreaBori 不要感觉不好,这只是一种与您习惯的语言不同的语言!
  • 看一看:qt.io
【解决方案2】:

您可以使用operator&lt;&lt;

std::cout << "Hello world!" << id << std::endl;

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

std::cout << "Hello world!" + std::to_string(id) << std::endl;

【讨论】:

    【解决方案3】:

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

    "Hello world!" + id 
    

    因此解析(如果 id 为 8)为 0xDEAD0008

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

    【讨论】:

    • 谢谢,但解释太多了.. XD 我只需要理解为什么不这样工作.. =)
    • A string literal's type 是一个数组,而不是一个指针。但是,数组可以衰减为指向第一个元素的指针,例如在指针算术中使用时。
    猜你喜欢
    • 2021-01-28
    • 2020-08-06
    • 2018-10-15
    • 2013-09-14
    • 2020-12-18
    • 2010-10-07
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多