找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 325|回复: 3

查找所有在一个给定字符集合中出现的字符

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-6-15 23:22:13 | 显示全部楼层 |阅读模式

请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符。这个函数的原型如下:
Char *find_char(char const *sourc, char const *chars);
它的基本想法是查找source字符中匹配chars字符串中任何字符的第一个字符,函数然后返回一个指向source中第一个匹配所找到的位置的指针。如果source中的所有字符均不匹配chars中的任何字符,函数就返回一个NULL指针,如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数也返回一个NULL指针。
举个例子:假定source指向ABCDEF,如果chars指向XYZ,函数就返回一个NULL指针 ,如果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。参数所指向的字符串是绝不会被修改的。
说明:C函数库中存在一个名叫strpbrk的函数,它的功能几乎和这个你要编写的函数一模一样。但这个程序的目的是让你自己练习操纵指针,所以必须做到下面两点:
A、你不应该使用任何用于操纵字符串的库函数(如strcpy,strcmp等)
B、函数中任何地方都不应该使用下标引用。

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-15 23:26:10 | 显示全部楼层
参考答案:
本题为2013年04月27日  题目参考答案
#include <stdio.h>
/**
* @brief find_char
*
* @Param: source
* @Param: chars
*
* Returns:
*/
char *find_char(const char *source, const char *chars)
{
    char *cp;

    if( source != NULL && chars != NULL )
    {
        for(; *source != &#39;\0&#39;; source++ )
        {
            for( cp = chars; *cp!= &#39;\0&#39;; cp++ )
            {
                if( *cp == *source )
                    return source;
            }
        }
    }
    return NULL;
}                                                         
/**
* @brief main
*
* @Param: argc
* @Param: argv[]
*
* Returns:
*/
int main(int argc,char *argv[])
{
    char *cp;

    cp = find_char(argv[1],argv[2]);

    if(cp == NULL)
    {
        printf("Not found chars in source!\n");
        return 0;
    }
    else
    {
        printf("%s\n",cp);
    }
    return 0;
}

14

主题

65

回帖

0

积分

新手上路

积分
0
发表于 2013-6-17 21:13:46 | 显示全部楼层
没有用过strpbrk这个函数,也没想到这个函数有什么用。。。
感觉函数原型设计得就不好,入参是const指针,返回的指针却是可写的,有隐患。

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-17 22:41:33 | 显示全部楼层

回 boyfaceone 的帖子

boyfaceone:没有用过strpbrk这个函数,也没想到这个函数有什么用。。。
感觉函数原型设计得就不好,入参是const指针,返回的指针却是可写的,有隐患。&#160;(2013-06-17 21:13)&#160;
在C语言中,函数的参数设置成const的目的是:当传入参数如果只是作为读取并不想修改的话,一般用const,免得程序中不小心修改值,这样编译器会报错。C程序员一般都要求养成这样一个习惯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-2 01:27 , Processed in 0.083974 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表