左移位运算符在c ++中从整数转换为字符串时做了什么

时间:2013-06-20 08:47:51

标签: c++ string sstream

假设您要将整数转换为字符串,这是c ++中的方法

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

如何在c ++中转换为字符串? stringstream包含什么以及上述程序的第3行 在那个陈述中,我的意思是左移运算符(因为我们知道符号'&lt;&lt;'用于左移)在这里做转换为字符串

5 个答案:

答案 0 :(得分:1)

这里的左移由append函数重载,想象一下 ss.append(c1)其中append可以有多个函数 追加(int i) 追加(字符串s) 追加(字节b) 等

每个函数都实际转换为正确的字符串并附加它......

答案 1 :(得分: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转换为字符串的一种非常基本的方法,我确信它在运算符“&lt;&lt;”中做得更好,但是你明白了。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以在C ++中重载各种运算符,包括按位左移&lt;&lt ;.从概念上讲,你可以覆盖它做任何事情;唯一的限制是操作数的数量无法改变。

C ++ IO流库中的流类利用了这一点。使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;以某种方式将参数写入流中,显然,按位移位流没有意义,因此操作符也可以用来做其他事情。这就是ss<<c1;是在做。它没有像按位移动那样做。

有一种思想流派认为运营商超载令人困惑(也许这就是为什么要问这个问题)。这就是运营商重载没有成为Java的原因。

答案 4 :(得分:0)

在这种情况下,

<<并不完全是左移算子。

它是一个流操作员。

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