C++将某一指定字符从一个已知的字符串中删除!

才学,求教大神们,这是我编的,运行一直有问题……大家帮帮忙啊
#include"iostream.h"
#include"string.h"
#include"stdio.h"
void main()
{
char s[80];
int key,i,j,l;
cout<<"输入字符串"<<endl;
cin>>s;
cout<<"输入要删除的字符"<<endl;
cin>>key;
l=strlen(s);
for(i=0;i<l;i++)
{if(key==s[i])break;
for(j=i;i<l;j++)
s[j]=s[j+1];}
cout<<"删除后的结果:"<<endl;
for(i=0;i<l;i++)
cout<<s[i];
cout<<endl;
}

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int main()
{
char s[80], key;
int i,j,l;
cout<<"输入字符串"<<endl;
cin>>s;
char ss[80];
gets(ss);
cout<<"输入要删除的字符"<<endl;
cin>>key;
l=strlen(s);
for(i=0;i<l;i++) {
if(key == s[i]) {
   for(j=i;j<l;j++)
     s[j]=s[j+1];
i -= 1;
l -= 1;
}
}
 
cout<<"删除后的结果:"<<endl;
for(i=0;i<l;i++) cout<<s[i];
cout<<endl;
return 0;
}

首先,using namespace std;初学者不知道namespace是什么没关系,但没有你的程序应该编译不通过吧……

然后虽然char内部是用256的整数存的,但其实大小是不一样的,可以char跟int比较,但读一个int跟读一个char是不同的,key应该是int;

然后输入字符串的时候一般大家都是回车来让程序继续的,然后你在读一个字符串会把回车读进来(回车在windows下是两个字符..)

所以读key之前把回车读掉,方法很多,我直接清了下行在输出下一个提示的……

然后break是退出循环……你原来一旦出现一个就退出循环 =.=!

然后每次移动之后长度会改变的,就算运行过程不影响结果,影响你的输出的说……

最后,友情建议使用int main() 程序最后return 0;

很多地方void main()后患无穷。

以及,你都用c++了, 开库开c++的吧


=.=任重道远,同志还需努力

追问

大神!我们书上全用void main的,对int main还不怎么了解…………我会好好学习的,你的一番话对我启发颇多啊!大神,能不能留下联系方式什么的,才学的菜鸟伤不起啊,求带!

追答

可能会有连续两个都是不合法字符
你向前移动之后不合法的被你移前面来了,但你for里还会i++所以移一次i要减一
l是长度,移动自后当然要减一。。
虽然你这里没什么影响..
你输出不for直接cout就没影响了...但万一干别的长度还有用什么的...长度...........

taobingxue001@126.com

追问

好像明白了〜谢谢哈〜!

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-22
程序我运行过,可以运行但是有一些瑕疵,你的要求是“将某一指定字符从一个已知的字符串中删除”,但这个程序的缺点在于它会删除全部的指定字符,如你输入“good”,然后再输入“o”,结果是“gd”,这显然与删除一个指定字符的要求不符合。
下面是对你问题的解答:
1.字符串的删除函数中,if语句之后*q++=*p,这里的*p是指针里的第二个值吗?
答:*p是一个字符,p才是指针。
2.for语句第一条件为空具体是怎么执行下面的内容的?
答:for语句第一条件只在循环开始的时候用一次,用与给赋初值,可以省略第一条件。然后到第二条件进行判断,若第二条件为真时执行循环体里的语句,然后执行第三条件,再判断第二条件是否为真,若真继续执行循环体....以此类推
3. 还有就是主函数里的输出语句cout<<"The new string is: "<<str<<endl;这里直接输出str,但是str在函数调用中并没有改变啊,为什么指针的内容变成指针q的内容?
答:这里是输入str指针指向的地址的全部内容,str在程序开始指向内存的特定空间,里面存你的字符串,程序运行过程中,str的确没有改变,但是在调用函数的时候,同样指向这块内存地址的P和Q将这段内存地址里面的内容修改了。举个简单的例子,str是一把钥匙,可以开A号保险柜,保险柜里放的是美元,函数中传值好比用str又配了一把钥匙,我用配的钥匙把美元拿了一部分,虽然我没动str钥匙,柜子也还是那个柜子,但是美元确变化了。
希望能对你的问题有帮助
第2个回答  2014-03-21
#include"iostream.h"
void main()
{
char c,s[80];
int i,j=0;
cout<<"输入字符串"<<endl;
cin>>s;
cout<<"输入要删除的字符"<<endl;
cin>>c;
for(i=0;s[i]!='\0';i++)
if(s[i]!=c)s[j++]=s[i];
s[j]='\0';
cout<<s<<endl;
}

第3个回答  2014-03-21
key的类型应为char
相似回答