string 出现out_of_range

「已注销」 2016-08-15 05:06:39
最近在联系小程序,目标:随机输入1~50个整数,输出最大最小值之和。
最近编写完程序之后发现报错,说是out_of_range.希望能给我解答,谢谢。
...全文
526 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-08-16
  • 打赏
  • 举报
回复
引用 8 楼 qq423399099 的回复:
[quote=引用 7楼我是你的主体 的回复:]请问while (s.at(i) != '\0')有什么问题呢,谢谢!
C-free ,g++ 以'\0'结尾,而在VS上执行时报错! std::string,这个不一定是'\0'结尾。有的编译器会加,有的编译器不会加。但是,注意:新的C++标准C++11里面规定std::string一定是以'\0'结尾,就看你的编译器有没有实现新标准了。[/quote] 我这个版本的vs中的string最后一个是不加‘/0’的,所以(s.at(i) != '\0')这句话本身就是错误的,i++之后就会越界。 非常感谢您对帮助!O(∩_∩)O。
小灸舞 2016-08-16
  • 打赏
  • 举报
回复
引用 7楼我是你的主体 的回复:
请问while (s.at(i) != '\0')有什么问题呢,谢谢!
C-free ,g++ 以'\0'结尾,而在VS上执行时报错!
std::string,这个不一定是'\0'结尾。有的编译器会加,有的编译器不会加。但是,注意:新的C++标准C++11里面规定std::string一定是以'\0'结尾,就看你的编译器有没有实现新标准了。
「已注销」 2016-08-16
  • 打赏
  • 举报
回复
请问while (s.at(i) != '\0')有什么问题呢,谢谢!
「已注销」 2016-08-16
  • 打赏
  • 举报
回复
我知道是数组越界了,但请问应该如何修改呢 主要不清楚自己那个地方是不对的啊,能详细解释一下吗 谢谢了。
paschen 版主 2016-08-15
  • 打赏
  • 举报
回复
s.at(i) 的时候越界了,也就是i超过字符串本身长度了,单步调试加以检查
赵4老师 2016-08-15
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
wen_eric 2016-08-15
  • 打赏
  • 举报
回复
访问越界了
小灸舞 2016-08-15
  • 打赏
  • 举报
回复
while (s.at(i) != '\0')你这句有问题。
你还是用s.length()长度来判断比较好
「已注销」 2016-08-15
  • 打赏
  • 举报
回复
#include<iostream> #include<string> using namespace std; #define N 20 class Test { public: Test() { s=""; result=0; useNum=0; a[N]=0; } string Input(); void ReadToInt(); void sort(); void print(); private: int result; string s; int useNum; int a[N];//数组已用个数。 }; string Test::Input() { cout<<"please input 1~50 number..."<<endl; cin>>s; cout<<s<<endl; return s; } void Test::ReadToInt() { int i=1,j=1,sign=1; while(s.at(i)!='\0') { if(s.at(i)!=','&&s.at(i)!=' ') { if(s.at(i)=='-') { sign=-1; } else { a[j]-a[j]*10+s[i]-'0'; } } i++; if(s.at(i)==','||s.at(i)=='\0') { a[j]=a[j]*sign; sign=1; j++; } } useNum=j; } void Test::sort() { int i,j,k,temp; int n=useNum; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) { if(a[k]>a[j]) k=j; } if(i!=k) { temp=a[k]; a[k]=a[i]; a[i]=temp; } } } void Test::print() { cout<<"Max + Min = "<<a[0]+a[useNum-1]<<endl; } int main() { Test test; test.Input(); test.ReadToInt(); test.sort(); test.print(); system("pause"); return 0; } 这是源码,请帮忙看一下,谢谢各位了。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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