首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ stringstream >>整数返回零

C++ stringstream >>整数返回零
EN

Stack Overflow用户
提问于 2012-05-30 23:13:23
回答 5查看 2K关注 0票数 4

我正在写一个函数来返回一个数字的倒数,也就是说,它将int(1234)转换为int(4321)。这是我目前所拥有的:

代码语言:javascript
运行
复制
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>

using namespace std;


int reverse(int num) {
  stringstream ss (stringstream::in | stringstream::out);
  string initial; 
  int reversed;

  // read the number in to a string stream
  ss << num;
  initial = ss.str();

  // flush the stringstream
  ss.str("");
  for(unsigned int i(0); i <= initial.size(); i++) {
    ss << initial[initial.size() - i];
  }
  ss >> reversed;

  return reversed;
}


int main(int argc, const char *argv[])
{
  int test = 9871;
  cout << "test = " << test << endl;
  cout << "reverse = " << reverse(test) << endl;

  return 0;
}

然而,这只是输出:

代码语言:javascript
运行
复制
test = 9871
reverse = 0

我非常确定问题出在ss >> reversed这一行,问题出在reversed被设置为0而不是ss的值,但是我不知道这段代码有什么问题,它看起来应该很简单,这让人恼火。有人能帮上忙吗?

谢谢

EN

Stack Overflow用户

发布于 2012-05-30 23:21:16

for循环会导致对initial的越界访问。除了Alessandro Pezzato指出的问题外,for循环中的终止条件需要更改为i < initial.size(),否则仍然会发生越界:

代码语言:javascript
运行
复制
for(unsigned int i(0); i < initial.size(); i++) {
    ss << initial[initial.size() - i - 1];
}
票数 2
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10819161

复制
相关文章

相似问题

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