请教老师,看看这个代码错误的原因

niuxiaobao 2014-03-22 01:37:22
题目:输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。

输出提示string字符串越界。
#include<iostream>
#include <string>
using namespace std;

string daoxu(string s)
{
int c=0;
string t="";
string::size_type i=0;
while (s[i]=='0')
{
i++;
}
t=t+s[i];
i++;
for(;i<s.size();i++)
{
for(string::size_type p=0;p<t.size();p++)
{
if(s[i]==t[p])
{
c=1;
break;
}
}
if(c!=1)
{
t=t+s[i];
}
c=0;
}
return t;
}
int main()
{
string num,t="";
char f;
cin>>num;
if(num[0]=='-')
{
f=num[0];
for (string::size_type i=num.size()-1;i>0;i--)
{
t=t+num[i];
}
cout<<f<<daoxu(t)<<endl;
}
else
{
for (string::size_type i=num.size()-1;i>=0;i--)
//问题好像出在这里,当i减为零之后继续循环,这时断点调试中显示i的值变成了 42949677292,
//然后继续循环就越界了,这是什么原因啊?
{
t=t+num[i];
}
cout<<daoxu(t)<<endl;
}
}


怎么解决这个问题啊?
...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
九九歌神 2014-03-25
  • 打赏
  • 举报
回复
同意楼上的说法,string::size_type 使得i不可能小于0,减到0时再减就变成了范围上界,改成int型应该就可以了
niuxiaobao 2014-03-22
  • 打赏
  • 举报
回复
引用 1 楼 movsd 的回复:
string::size_type i把i定义成了无符号整数,所以i不可能小于0。
那应该怎么解决呢?
movsd 2014-03-22
  • 打赏
  • 举报
回复
string::size_type i把i定义成了无符号整数,所以i不可能小于0。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧