0

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

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

它是如何在 C++ 中转换成字符串的?stringstream 包含什么以及在该语句的上述程序的第 3 行中,即我的意思是左移运算符(我们知道符号 '<<' 用于左移)在这里做什么来转换为字符串

4

5 回答 5

1

这里的左移是 append 函数的重载,将其视为 ss.append(c1) 其中 append 可以有多个函数 append(int i) append(string s) append(byte b) 等

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

于 2013-06-20T08:54:43.607 回答
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 转换为字符串的一种非常基本的方法,我相信它在运算符“<<”中做得更好,但你明白了。

于 2013-06-20T09:07:55.463 回答
0

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

于 2013-06-20T08:53:35.737 回答
0

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

C++ IO 流库中的流类利用了这一点。使用 << 以某种方式将参数写入流在语法上很可爱,显然,按位移动流没有任何意义,因此运算符也可以用来做其他事情。那是什么ss<<c1;是在做。它没有像按位移位那样做任何事情。

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

于 2013-06-20T08:57:40.077 回答
0

<<在这种情况下,不完全是左移运算符。

它是一个流运算符。

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

于 2013-06-20T09:03:54.970 回答