Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

字符串查找

Posted on 2009-01-18 11:57 赞劲小子 阅读(2757) 评论(2)  编辑 收藏 引用 所属分类: C和指针
近日看《C与指针》,讲习题中自己认为以前不懂的,或者不会的都写了下来,供大家参考。
请编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符。以下是要求:
1.这个函数的原型如下:char *find(char const *source, char const *chars);
2.它的基本想法是查找source字符串中匹配chars字符串中任何字符的第一个字符。
3.函数然后返回一个指向source中第1个匹配所找到的位置的指针。如果source中的所有字符均不匹配
  chars中的任何字符,
4.函数就返回一个NULL指针。如果任何一个参数为NULL,或任何一个参数所指向的字符串为空,函数也返
  回一个NULL指针。
5.举个例子,假定source指向ABCDEF。如果chars指向XYZ、JUEY或QQQQ,函数就返回一个NULL指针。如
  果chars指向XRCQEF,函数就返回一个指向source中C字符的指针。
6.参数所指向的字符串是绝不会被修改的。
  a.你不应该使用任何用于操纵字符串的库函数(如strcpy,strcmp,index等)。
  b.函数中的任何地方都不应该使用下标引用。
#include <stdio.h>
#define MAX 50
char *find_char(const char *source, const char *chars);
void main(){
    
char name[MAX];
    gets(name);
    
char *ptr;
    ptr 
= find_char(name,"aod");
    
if(ptr != NULL)
        puts(ptr);
    
else
        printf(
"for NULL\n");
}

char *find_char(const char *source, const char *chars){
    
const char *temp = NULL;
    
if(source == NULL || chars == NULL || source == "" || chars == "")
        
return NULL;
    
while(*source != '\0'){
    
/*
    **记住temp要在这里申明,因为source的一个字符跟source中的每一个字符匹配一次后
    **temp就到了chars的末尾了,所以要将temp还回去。
    
*/

        temp 
= chars; 
        
while(*temp != '\0')
            
if(*temp == *source)
                
return (char *)source;
            
else
                temp
++;
            source
++;
    }

    
return NULL;

}

Feedback

# re: 字符串查找  回复  更多评论   

2011-07-30 11:13 by lurker
这么写更清晰一些。一般平时工作时很少用while的,而且一定要加大括号,哪怕只有一行。
for (; * source!= '\0’; source++)
{
for (temp = chars; *temp != '\0' ; temp++)
{
if (*temp == *source)
{
return (char *) source;
}
}
}

# re: 字符串查找  回复  更多评论   

2012-08-20 14:14 by lost-angel
不是很理解上方代码,貌似代码要求是查找字符串 但是上面只实现了对字符串的首字符进行匹配的工作

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理