用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 *c = new char;
itoa((pos+1),c,10);
return c;
}
else

{
char *c = "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;
}
運行結果:
代碼二:
群里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鍵退出,其它任意鍵繼續!
地震讓大伙知道:居安思危,才是生存之道。