【问题标题】:what does the left shift operator do in converting from integer to string in c++左移运算符在c ++中从整数转换为字符串时做了什么
【发布时间】:2013-06-20 08:47:51
【问题描述】:

假设你想将一个整数转换为字符串,这是c++中的方法

    int c1=999;
    stringstream ss;
    ss<<c1;
    string str=ss.str();

它是如何在 C++ 中转换成字符串的? stringstream 包含什么以及在上述程序的第 3 行 在该语句中,即我的意思是 left shift operator(我们知道符号 '

【问题讨论】:

  • 查找流插入运算符,以及一般的流。它更像是一个 C++ 创建的概念,而不是一个实际的运算符(它是位移位的重载)。
  • 将字符串打印到 std::cout 并亲自查看?实验是最好的学习方式。
  • Bjarne 有时将这种重载称为

标签: c++ string sstream


【解决方案1】:

要将 int 转换为字符串(非常基本),您必须遍历所有数字,将其转换为常规字符,然后将其放入字符串中:

int toConvert = 999;
string res = "";

while (toConvert)
{
  int lastDigit = toConvert % 10; //retrieve last digit
  char c = lastDigit + '0';       //translate it to the char corresponding
  string reverse(c);      //We have to add it in front of the string, or otherwise 
  reverse.append (res);   // the digits will be reversed.
  res = reverse;
  toConvert /= 10;
}

这是一种将 int 转换为字符串的非常基本的方法,我相信它在运算符“

【讨论】:

    【解决方案2】:

    这里的左移是 append 函数的重载,可以认为是 ss.append(c1) 其中追加可以有多个功能 附加(int i) 附加(字符串 s) 附加(字节 b) 等等

    每个函数都对正确的字符串进行实际翻译并附加它...

    【讨论】:

      【解决方案3】:

      您的代码中没有左移运算符。在 C 中,&lt;&lt; 是左移。在 C++ 中,它是流插入运算符(出于 C 兼容性的原因,也支持左移)。

      【讨论】:

        【解决方案4】:

        您可以在 C++ 中重载各种运算符,包括按位左移

        C++ IO 流库中的流类利用了这一点。使用 ss<<c1;是在做。它不像按位移位那样做任何事情。

        有一种观点认为运算符重载令人困惑(也许这就是为什么提出这个问题的原因)。这就是为什么运算符重载没有进入 Java 的原因。

        【讨论】:

          【解决方案5】:

          &lt;&lt; 在这种情况下不完全是左移运算符。

          它是一个流操作符。

          追加(插入)字符到您的字符串流中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-28
            • 1970-01-01
            • 2016-02-24
            • 1970-01-01
            • 2014-01-21
            • 2013-03-28
            相关资源
            最近更新 更多