以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]请教一个C++程序  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=62405)


--  作者:segeon
--  发布时间:5/9/2008 10:09:00 PM

--  [求助]请教一个C++程序
这个程序的目的是:检查一个字符串中是否含有‘a’这个字符,如果有则把a去掉,然后输出这个字符串。我运行的时候老是出现runtime error,请高手指点。。。。谢谢~
#include<iostream>
#include<string>

using namespace std;

void main()
{
 int n;
 string text;
 cin >> text;
 n=text.length();
 for(int i=0;i<n;i++)
 {
  if (text.at (i)=='a') text.erase (i,1);
 }
 cout << text<<endl;
}


--  作者:inzagyi
--  发布时间:5/10/2008 2:25:00 AM

--  
void main()  应该使用int main()吧?
  我也是刚学的呵呵,说不来个所以然
--  作者:BirdOnSky
--  发布时间:5/10/2008 12:01:00 PM

--  

Try this.

===========
string text;
cin >> text

   string result="";
   for(int i=0; i<text.length();++i)
   {
      if(text[i]!='a')
         result+=text[i];
   }


--  作者:segeon
--  发布时间:5/10/2008 11:31:00 PM

--  
恩,你的方法是可行的,但我不明白我的那个方法为什么就不行呢?能给解释一下吗?
--  作者:jackfeng
--  发布时间:5/11/2008 11:53:00 AM

--  
因为你在删除了一个a之后,字符串的长度已经改变……但是你还是用原来字符串的长度去读……当然会越界……
#include<iostream>
#include<string>
using namespace std;

void main()
{
 int n;
 string text;
 cin >> text;
 n=text.length();
 for(int i=0;i<n;i++)
 {
  if (text.at (i)=='a') {
   text.erase (i,1);
   n--;
   i--;
  }
 }
 cout << text<<endl;
}

或者

#include<iostream>
#include<string>
using namespace std;

void main()
{
 string text;
 cin >> text;
 for(int i=0;i<text.length();i++)
 {
  if (text.at (i)=='a') {
   text.erase (i,1);
   i--;
  }
 }
 cout << text<<endl;
}

都可以……


--  作者:segeon
--  发布时间:5/12/2008 6:59:00 PM

--  
明白啦~~太感谢了!!!
--  作者:jackfeng
--  发布时间:5/13/2008 3:36:00 PM

--  
不用……
你应该自己学会调试……
--  作者:jackfeng
--  发布时间:5/13/2008 3:36:00 PM

--  
不用……
你应该自己学会调试……
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
70.313ms