1.编写一个函数,它在一个字符串中进行搜索,查找在一个给定字符集合中出现的所有字符。这个函数的原型如下:
char *find_char( char const *source, char const *chars );
它的基本想法是查找source字符串中匹配chars字符串中任何字符的第1个字符,然后返回一个指向source中第1个匹配所找到的位置的指针。如果source中的所有字符均不匹配chars中的任何字符,就返回一个NULL指针。如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数也返回一个NULL指针。举个例子,假定source指向ABCDEF,如果chars指向XYZ、JURY或QQQQ,函数就返回一个NULL指针;如果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。参数所指向的字符串是绝不会被修改的。
碰巧,C函数库中存在一个名叫strpbrk的函数,它的功能几乎和这个要编写的函数一模一样。但这个程序的目的是让你自己练习操纵指针,所以:a.不应该使用任何用于操纵字符串的库函数(如strcpy、strcmp、index等);b.函数中的任何地方都不应该使用下标引用。
书没有答案,下面是我自己写的:
#include <stdio.h>
#include <stdlib.h>
char *find_char(char const *source, char const *chars)
{
char* sol = NULL;
char* s_str;
char* c_str;
for(s_str = source; *s_str != '\0'; s_str++){
for(c_str = chars; *c_str != '\0'; c_str++){
if(*c_str == *s_str){
sol = s_str;
printf("%c",*sol);
}
}
}
return sol;
}
int main(){
char const source[] = "ABCDEF";
char const chars[] = "XRCQEF";
find_char(source, chars);
}
在虚拟机里运行了一下,是可以的。但是是否存在其他bug,还需要调试一下。