随笔 - 303  文章 - 883  trackbacks - 0
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

欢迎光临! 
闲聊 QQ:1074961813

随笔分类(357)

我管理的群

公共blog

  • n维空间
  • Email : java3d@126.com 群 : 12999758

参与管理的论坛

好友的blog

我的其他blog

朋友的网站

搜索

  •  

最新评论

用c语言实现函数strcasestr。函数原型:char*strcasestr(const char*haystack,const char*needle) 函数返回字符串指针,指向字符串haystack中第一次出现字符串needle的开始位置,字串匹配时忽略大小写,如果没有找到字符串,返回null,完成代码后,给出5个以上的单元测试用例,以证明你的程序在各种条件下能够正确运行

代码一:

本人的代码(编译环境VC6.0) 请多多指教! 
#include<iostream>
#include
<string>
using namespace std;

char*strcasestr(const char*haystack,const char*needle);
char*bigtolit(const char*str);

main()
{
    
//五个的测试程序
    cout<<strcasestr("abcDEfghi","EF")<<endl;
    cout
<<strcasestr("111223","11223")<<endl;
    cout
<<strcasestr("tshihisih","ss")<<endl;
    cout
<<strcasestr("tshihisih","si")<<endl;
    cout
<<strcasestr("tshihfsfsah","fsa")<<endl;

  
return 0;
}


char*strcasestr(const char*haystack,const char*needle)
{
    
string str = bigtolit(haystack);
    
string str1 = bigtolit(needle);

    
int pos = str.find(str1);

    
if(0 != (pos+1))
    
{
        
char *= new char;
        itoa((pos
+1),c,10);
        
return c;
    }

    
else
    
{
        
char *= "NULL";
        
return c;
    }

}


char*bigtolit(const char*str)
{
    
char *hay = new char;
    memset(hay,
0,sizeof(hay));

    
for(int i=0;i<strlen(str);i++)
    
{   
        hay[i] 
= tolower(str[i]);     
    }

    
    
return hay;
}
 
运行结果:
5
2
NULL
7
8



代码二:


群里IT007朋友写的

#include <string.h>
#include 
<stdio.h>


char* strcasestr(const char *haystack,const char *needle);

main()
{
    
char  str1[100];
    
char  str2[50];
    
char* str;


    
do{
        
        system(
"cls");

        printf(
"请分别输入长度不大于100和长度不大于50的两个字符串(用空格或者回车隔开):\n");
        
        scanf(
"%s%s",str1,str2);

        
if(strlen(str1)>100||strlen(str2)>50){
            printf(
"\n对不起,你输入的字符串过长,请重新输入再来!");
            
continue;
        }


      str
=strcasestr((const char*)str1,(const char*)str2);

      
if(!str){
            printf(
"父串中查找不到与子串匹配的串!\n按Q键退出,其它任意键继续!\n");
            
continue;
        }


    printf(
"父串中第一个与子串匹配串的位置为:%d\n",str-str1+1);

    printf(
"按Q键退出,其它任意键继续!\n");

    }
while(getch()!='q');
}




//////////////指针版的查找子串在源串中的位置的函数/////////////////
//加强错误处理之后的函数
//1。当子串为空时进行了处理
//2。当子串比源串要长时
//3。每次比较完之后,父串的指针只向前移动一位
//4。现在可以进行勿略大小写的判断比较了(最新)
//5。修正了一个BUG,即不能进行字母A、a、Z、z的忽略大小写的判断
//6。对忽略大小写部分的判断进行了代码,代码明显少了些(最新)
////////////////////////////////////////////////////////////////////


/*
////////////////////////////

函数原型:char *strcasestr(const char *haystack,const char *needle) 

函数功能:指向字符串haystack中第一次出现字符串needle的开始位置,
          字串匹配时忽略大小写,如果没有找到字符串,返回null.

///////////////////////////
*/


char* strcasestr(const char* haystack,const char* needle)
{
    
int i=0;
    
while(*haystack&&*needle){            
          
while(*haystack==*needle||\
              
*haystack==((*needle>='a'&&*needle<='z')?*needle-32:*needle)||\
              
*haystack==((*needle>='A'&&*needle<='Z')?*needle+32:*needle)){
            
if(!*(++needle))return  (char*)haystack-i;
            
if(!*(++haystack))return 0;
            i
++;
        }

        needle
-=i;
        
//haystack=haystack-i+1;
        haystack-=(i-1);
        i
=0;
    }

    
return 0;
}


运行结果:
请分别输入长度不大于100和长度不大于50的两个字符串(用空格或者回车隔开):
FFadbcdddDD
DDd
父串中第一个与子串匹配串的位置为:
7
按Q键退出,其它任意键继续
!


地震让大伙知道:居安思危,才是生存之道。
posted on 2007-11-16 13:37 小寻 阅读(2844) 评论(2)  编辑  收藏 所属分类: c/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...

FeedBack:
# re: C字符串处理 2008-02-29 13:01 sPhinX
“用c语言实现函数strcasestr。”

#include<iostream>
#include<string>
using namespace std;

这好像是题意都没有读懂吧。

这样的库函数我是不敢用,你呢?  回复  更多评论
  
# re: C字符串处理[未登录] 2008-02-29 15:52 寻觅
呵呵^_^
非常感谢您的指正
有时间 我定改过来   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: