【发布时间】:2018-04-27 09:22:27
【问题描述】:
我必须编写一个程序,它接受字符串输入并输出没有特殊字符的排序字符串,但即使循环只运行到字符串末尾,它也会抛出索引越界异常
#include <iostream>
#include <string.h>
using namespace std;
int main(){
string mes="";
string tem;
cin>>tem;
for (int i=0;i<tem.length();i++){
char ch=tem.at(i);
if((ch<=65&&ch<=90)||(ch>=97&&ch<=122))
mes+=ch;
else
continue;
}
cout<<mes;
for(int i=0;i<tem.length();i++){
int small=(int)mes.at(i);
int spos=i;
for(int j=i;j<tem.length();j++){
int a=(int)mes.at(j);
if(a<small){
small=a;
spos=j;
}
}
char temp=' ';
temp=mes.at(i);
mes.at(i)=mes.at(spos);
mes.at(spos)=temp;
}
cout<<mes;
}
这是错误信息:
terminate 'std::out_of_range' what(): basic_string::at: __n(即 3)>= this->size()(即 3)
【问题讨论】:
-
你应该在从
mes读取的循环中使用mes.length()。