题目:请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符串集合中出现的字符。这个函数的原型应该如下:
char *find_char(char *source, char *chars);
它的基本功能是:
1.查找source字符串中匹配chars字符串中任何字符的第一个字符,然后函数返回一个指向source中第一个匹配所找到的位置的指针。
2.如果scource中的所有字符均布匹配chars中的任何字符,函数就返回一个NULL指针。
3.如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数野返回一个NULL指针。
例如:假定source指向ABCDEF。如果chars指向XYZ、JURY或QQQQ,函数就返回一个NULL指针。如果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。参数所指向的字符串是绝不会被修改的。
要求:
a.你不应该使用任何用于操纵字符串的库函数(如strcpy,strcmp,index等);
b.函数中的任何地方都不应该使用下标引用。
//*********************************************************************************************************************
#include<stdio.h>
char *find_char(char *source, char *chars);
int main()
{
char C1[] = "bbbbgggghhhh";
char C2[] = "aaaassss";
printf("%c\n",*find_char(C1, C2));
return 0;
}
char *find_char(char *source, char *chars)
{
char a = 0;
int k = 0;
int l = 0;
char *null=NULL;//返回的NULL指针;
char *i = &a;
char *j = &a;
int n1 = 0;
int n2 = 0;
i = source;
j = chars;
while (*i != '\0') {
n1++;
i++;
}//计算出source数组的长度;n1,即为source字符串的长度;
printf("%d\n", n1);
while (*j != '\0') {
n2++;
j++;
}//计算出chars数组的长度;n2,即为chars字符串的长度;
printf("%d\n", n2);
i = source;
j = chars;
for (k;k < n1;k++) {
j = chars;
l = 0;
for (l;l < n2;l++) {
if (*i == *j) {
return i;
}
if (*i == NULL || *j == NULL) {
return null;
}
j++;
}
i++;
}
return null;
}
/* 对于这个要求:
3.如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数野返回一个NULL指针。
for (k;k < n1;k++)
for (l;l < n2;l++)
这两个判断语句已经可以判断字符串是否为空,为空的话n1||n2==0;那么不管是经过循环还是直接跳出循环返回NULL都是符合要求的。