才学,求教大神们,这是我编的,运行一直有问题……大家帮帮忙啊
#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;
}
首先,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
好像明白了〜谢谢哈〜!