C字符串处理

C字符串处理
用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键退出,其它任意键继续
!


地震让大伙知道:居安思危,才是生存之道。

你可能感兴趣的:(C字符串处理)