题目来源:大工慕课 链接
作者:Caleb Sung
题目要求
要求:输入一个字符,从字符串里找到第一个该字符的位置,将其以后的字符输出,之后将字串中的该字符都删除,将删除后的字符串输出,同一字母的大、小写按不同字符处理。find
函数的返回值是字串中该字符第一次出现的位置,如果没有该字符,返回空指针,del
函数的返回值是字串首地址。
例如:若程序执行时初始字符串为:C and c++ languge is useful!
从键盘输入字符:n,则输出:“第一个n后的字串为:d c++ languge is useful!” ,接着输出“删除n后的字串:C ad c++ laguge is useful!”,也可以输入u,w 进行验证。
题目代码
#include "stdio.h"
char* find(char *s,char c)
{
/*********Begin**********/
/********** End **********/
}
char* del(char *s,char c)
{
/*********Begin**********/
/********** End **********/
}
int main()
{
char str[]="C and c++ language is useful!";
char ch,*p;
printf("原始字符串:%s\n", str);
printf("输入一个字符:");
scanf("%c",&ch);
//******Fill*******
/*____________________ //调用函数,使p指向字符出现的第一个位置。*/
p=find(str,ch);
if(p)
{
printf("第一个%c后的字串为:%s\n",ch,p+1);
printf("删除%c后的字串:%s\n",ch,del(str,ch));
}
else
{
printf("字符在字串中不存在。\n");
}
return 0;
}
参考解答
题中划线填空的部分已经补全在题目代码的相应地方。
这道题因为没有引入string.h
而不能使用strlen()
来直接得到字符串的长度。
1. find()函数
char* find(char *s,char c)
{
/*********Begin**********/
char *x;
for(x=s; *x!=0; x++){
if(*x == c){
return x;
}
}
return NULL;
/********** End **********/
}
2. del()函数
char* del(char *s,char c)
{
/*********Begin**********/
char *x, *tmp;
int len;
x = s;
while(*x){
if(*x == c){
for(tmp=x+1; *tmp!='\0'; tmp++){
*(tmp-1) = *tmp;
*tmp = '\0';
}
x = s;
}
else{
x++;
}
}
x = s;
return x;
/********** End **********/
}
运行效果
输入测试字符a
:
原始字符串:C and c++ language is useful!
输入一个字符:a
第一个a后的字串为:nd c++ language is useful!
删除a后的字串:C nd c++ lnguge is useful!
符合题目要求。