程序填空题:字符串的修改
如果字符串内容要修改,则以字符数组的形式存放。一般有修改字符,插入、删除等操作。如果仅仅修改内容,不改变长度,那我们就遍历字符串,进行判断是不是要修改的元素,如果是,则处理。
比如将字符串里的所有字母(包括大写字母和小写字母),改为字符8 。并将字符串输出。
我相信同学们都会编写这个程序。虽然会,我们还是梳理下思路吧。
1.输入字符串;
2.处理字符串,将字符串里的字母改写为字符8;
3.输出字符串。
#include<stdio.h>
void modify(char *s);
int main()
{
char str[81],ch;
scanf("%c",&ch);
int i;
for( i=0;ch!='\n';i++)//输入每一个字符,放入数组里
{
str[i]=ch;
scanf("%c",&ch);
}
str[i]='\0';//加上结束标记
modify(str);//调用字符串修改函数
puts(str);
return 0;
}
void modify(char *s)
{
for(char *p=s;*p!=0;p++)//遍历字符串,如果是字母,则进行修改
{
if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z')
{
*p='8';//注意字符8的表示,区分字符8和数值8
}
}
}
运行结果为:

小可爱们,有没有注意到字符串的输入并没有使用gets或者scanf里的%s,而是一个一个字符的输入。变量i即为输入字符存入的下标,最后输入结束后,别忘记了加上字符串的结束标记。
我们试着完成这道题吧。
删除字符串里所有字母。
### 输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
### 输出格式:
输出删掉字母后的字符串
### 输入样例:
Hello,2021
### 输出样例:
,2021
如果删掉字符串中多个字符,当然可以每删掉一个,后面的元素前移。小伙伴们,你可以在编译器自己试试。
我们也可以用前面输入字符串的方法来做,思路为:
1.对k初值,表示不删除元素将要存放的下标
2.对字符串中将每个元素进行判断:
如果是删除元素,不处理
如果不是,则放在下标为k处,然后K加1
3.对新的字符串加上结束标记符
c++
#include<stdio.h>
void del(char *s);
int main()
{
char str[81];
gets(str);
del(str);
puts(str);
return 0;
}
void del(char *s)
{
int i,k;
for(i=0,k=0;s[i]!=0;i++)
{
if(@@[!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')](1))
{
s[k++]=@@[s[i]](1);
}
}
s[k]=@@['\0'](1);
}
答案:
第1空:!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
第2空:s[i]
第3空:'\0'
比如将字符串里的所有字母(包括大写字母和小写字母),改为字符8 。并将字符串输出。
我相信同学们都会编写这个程序。虽然会,我们还是梳理下思路吧。
1.输入字符串;
2.处理字符串,将字符串里的字母改写为字符8;
3.输出字符串。
#include<stdio.h>
void modify(char *s);
int main()
{
char str[81],ch;
scanf("%c",&ch);
int i;
for( i=0;ch!='\n';i++)//输入每一个字符,放入数组里
{
str[i]=ch;
scanf("%c",&ch);
}
str[i]='\0';//加上结束标记
modify(str);//调用字符串修改函数
puts(str);
return 0;
}
void modify(char *s)
{
for(char *p=s;*p!=0;p++)//遍历字符串,如果是字母,则进行修改
{
if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z')
{
*p='8';//注意字符8的表示,区分字符8和数值8
}
}
}
运行结果为:

小可爱们,有没有注意到字符串的输入并没有使用gets或者scanf里的%s,而是一个一个字符的输入。变量i即为输入字符存入的下标,最后输入结束后,别忘记了加上字符串的结束标记。
我们试着完成这道题吧。
删除字符串里所有字母。
### 输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
### 输出格式:
输出删掉字母后的字符串
### 输入样例:
Hello,2021
### 输出样例:
,2021
如果删掉字符串中多个字符,当然可以每删掉一个,后面的元素前移。小伙伴们,你可以在编译器自己试试。
我们也可以用前面输入字符串的方法来做,思路为:
1.对k初值,表示不删除元素将要存放的下标
2.对字符串中将每个元素进行判断:
如果是删除元素,不处理
如果不是,则放在下标为k处,然后K加1
3.对新的字符串加上结束标记符
c++
#include<stdio.h>
void del(char *s);
int main()
{
char str[81];
gets(str);
del(str);
puts(str);
return 0;
}
void del(char *s)
{
int i,k;
for(i=0,k=0;s[i]!=0;i++)
{
if(@@[!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')](1))
{
s[k++]=@@[s[i]](1);
}
}
s[k]=@@['\0'](1);
}
答案:
第1空:!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
第2空:s[i]
第3空:'\0'