《C和指针》——6.1
6.1
题目:
编写一个函数,在一个字符串中进行搜索,查找另一子字符串中出现的字符。
函数原型如下:
char *find_char(char const *source, char const *chars);
要求:
a.不适用任何用于操纵字符串的库函数(如:strcpy strcmp等)
b.函数中不能使用下标引用
解答代码:
#include <stdio.h> char *find_char(char const *source, char const *chars)
{
int i, j;
if ((*source != NULL) && (*chars != NULL))
{
for (j=; *(source+j) != '\0'; j++)
{
for (i=; *(chars+i) != '\0'; i++)
{
if (*(source+j) == *(chars+i))
{
printf("i = %d\n", j);
return ((char *)(source+j)); //注:source类型为(char const *),函数类型为(char *),返回时需要进行强制类型转换
}
}
}
return NULL;
}
else
return NULL;
} int main()
{
char source[] = "ABCDEB";
char chars[] = "EF"; char *p = find_char(source, chars); if (p != NULL)
{
printf("Find the substr at %d\n", p-source);
}
else
printf("Substr no found!"); getchar();
return ;
}
注:
1、函数中使用双层循环查询对比,外层用于source数据循环,内层用于子字符串数据循环,逐一进行对比。
2、函数定义参数类型为(char const *)和返回值类型(char *)不一致,不能直接返回,必须进行类型强制转换((char *)(source+j))。