大家好,这里是君君的小萌新。
今天给大家分享一道整理字符串的题目
题目要求,输入一个字符c,再输入一个字符串str,要求删掉str中所有字符c,并输出新的字符串str
其实这题应该不算很难,所有今天小萌新想给大家带来多种的解法。
第一种:老实整理型:
#include<stdio.h>
#include<string.h>
int main (){
char c;
scanf("%c",&c);
char s[99];
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
if(s[i]==c)
for(int j=i;j<strlen(s);j++)
s[j]=s[j+1];
puts(s);
return 0;
}
第二种:选择性输入型:
#include<stdio.h>
int main (){
char c;
scanf("%c",&c);
char s[99];
char t=getchar();
int i=0;
while((t=getchar())!='\n')//遇到换行符停止输入
if(t!=c)//获取的字符不是字符c,才输入字符串s
s[i++]=t;
puts(s);
return 0;
}
第三种:选择性输出型:
#include<stdio.h>
#include<string.h>
int main (){
char c;
scanf("%c",&c);
char s[99];
scanf("%s",s);
for(int i=0;i<strlen(s);i++)
if(s[i]!=c)//如果是字符c,就不输出
putchar(s[i]);
return 0;
}
三者运行结果基本相同:(唯一区别是第三种的输出里没有换行符,因为前两种的puts函数会在输出结束后自动换行)
当然,这道题目题干说明了是先输入要删除的字符c,再输入字符串s。如果输入顺序颠倒,则第二种方法会不适用。
另外,也可以用gets函数直接获取字符串s,但是需要把前一个scanf写成scanf("%c\n",&c);不然缓冲区的换行符会直接使gets函数得到空字符串。或者,可以在输入字符c之后,再写一个getchar拿走缓冲区中的换行符。因为gets函数遇到换行符就会停止,但scanf会去掉前导的换行符,空格。
比如同样是输入" 123qwe\n",以下两个程序会有不同结果:
代码一:
char s[99]={};
gets(s);
puts(s);
代码二:
char s[99]={};
scanf("%s",s);
puts(s);
如果输入“ \n123\n"
代码一:
第一个换行符直接结束了输入,字符串为三个空格。
代码二:
scanf自动略过空格和换行符,字符串为123。
不知不觉跑题了。。。
不管怎么样,希望这篇文章对大家能有所帮助吧 !
顺便发个投票,不知道这次提供的三个解法大家更喜欢哪一个呢?
感谢阅读!