《C和指针》章节后编程练习解答参考——6.1

《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=0; *(source+j) != '\0'; j++)
        {
            for (i=0; *(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 0;
}

注:

1、函数中使用双层循环查询对比,外层用于source数据循环,内层用于子字符串数据循环,逐一进行对比。

2、函数定义参数类型为(char const *)和返回值类型(char *)不一致,不能直接返回,必须进行类型强制转换((char *)(source+j))。

posted @ 2015-11-15 16:44  micro虾米  阅读(479)  评论(0编辑  收藏  举报