C++ STL 的一个简单小程序,为什么老是崩溃?在线等。

//要求:提示用户输入一个句子(英文,并且按enter键结尾),该程序将句子中的字母按ASCII码编码顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,例如://... //要求:提示用户输入一个句子(英文,并且按enter键结尾),该程序将句子中的字母按ASCII码编码顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,例如://输入: who is your daddy
//输出: add dh ioor suwyy
int main()
{
cout<<"Please enter a sentence : "<<endl;
string str;
getline(cin,str);
vector<char>::iterator iter;
vector<char>SRT;
vector<int>space;//记录空格位置
unsigned int i,k = 0;
for(i=0;str[i]!='\0';i++)//复制
{
SRT.push_back(str[i]);
if(str[i]==' ') {space[k] = i;k++;}//记录空格的位置
}
unsigned int spaceNum = count(SRT.begin(),SRT.end(),' ');//计算空格数
sort(SRT.begin(),SRT.end());//按ASC码从小到大排序,空格是全部排在前面的
SRT.erase(SRT.begin(),SRT.begin()+spaceNum);//删除前面空格
for(i=0;i<spaceNum;i++)//再将空格一一插入
{
iter = SRT.begin()+space[i];//再上次记录的位置处插入
SRT.insert(iter,' ');

} for(unsigned j=0;j<SRT.size();j++) cout<<SRT[i];
return 0;
}
展开
 我来答
dfdglei
2013-04-25
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
int main()
{
cout<<"Please enter a sentence : "<<endl;
string str;
getline(cin,str);
vector<char>::iterator iter;
vector<char>SRT;
vector<int>space;//记录空格位置
unsigned int i,k = 0;
for(i=0;i<str.size();i++)//复制 //str.size可以取到长度
{
SRT.push_back(str[i]);
if(str[i]==' ') {space.push_back(i);}//记录空格的位置 //用push_back进行记录
}
unsigned int spaceNum = count(SRT.begin(),SRT.end(),' ');//计算空格数
sort(SRT.begin(),SRT.end());//按ASC码从小到大排序,空格是全部排在前面的
SRT.erase(SRT.begin(),SRT.begin()+spaceNum);//删除前面空格
for(i=0;i<spaceNum;i++)//再将空格一一插入
{
iter = SRT.begin()+space[i];//再上次记录的位置处插入
SRT.insert(iter,' ');
}
for(unsigned j=0;j<SRT.size();j++)
cout<<SRT[j]; //应该是j
return 0;
}
追问
谢谢你哈,我想再问一下对容器中元素赋值必须用push_back函数吗?(if(str[i]==' ') {space.push_back(i);}//记录空格的位置   //用push_back进行记录)
追答
不是必须要用push_back,你也可以用insert,但是像你之前直接用space[k]就会存在一个问题,因为容器有大小,用[k]只能取容器中已经存在的位置,如果这个位置超过了容器的大小,space[k]就会崩溃。space[k]这种操作一般是用来修改容器中的某一个元素用的,而不是新加元素。而push_back是将元素插入在容器末尾,它会自动扩展容器的大小。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式