现在我要查找子串,而且不区分大小写,如"a中国Ch"就是一个子串,这要怎么办啊?
如果全是英文就好做了.
我编了一个,献丑了.
#include "iostream.h"
void main()
{
int i=0,j=0,t=0,k=0,g=0,c=0;
char a[10],b[100];
cout<<"输出总字符串"<<endl;
cin>>b;
cout<<"输出要查找的字符串"<<endl;
cin>>a;
while(a[t]!='\0')t++;
while(b[k]!='\0')k++;
if(t==1)for(;i<k;i++){if(a[0]==b[i])c++;}
else {for(;i<k;i++)
{if(a[0]==b[i])
for(j=1;j<t;j++){if(a[j]!=b[++i])break;else g++;}
if(g==t-1){c++;g=0;}}}
cout<<"子串个数";
cout<<c<<endl;
}
中英文通吃.
[此贴子已经被作者于2006-5-22 21:53:24编辑过]
我编了一个,献丑了.
#include "iostream.h"
void main()
{
int i=0,j=0,t=0,k=0,g=0,c=0;
char a[10],b[100];
cout<<"输出总字符串"<<endl;
cin>>b;
cout<<"输出要查找的字符串"<<endl;
cin>>a;
while(a[t]!='\0')t++;
while(b[k]!='\0')k++;
if(t==1)for(;i<k;i++){if(a[0]==b[i])c++;}
else {for(;i<k;i++)
{if(a[0]==b[i])
for(j=1;j<t;j++){if(a[j]!=b[++i])break;else g++;}
if(g==t-1){c++;g=0;}}}
cout<<"子串个数";
cout<<c<<endl;
}
中英文通吃.
好象你的要区分大小写,请看看题目要求
我编了一个,献丑了.
#include "iostream.h"
void main()
{
int i=0,j=0,t=0,k=0,g=0,c=0;
char a[10],b[100];
cout<<"输出总字符串"<<endl;
cin>>b;
cout<<"输出要查找的字符串"<<endl;
cin>>a;
while(a[t]!='\0')t++;
while(b[k]!='\0')k++;
if(t==1)for(;i<k;i++){if(a[0]==b[i])c++;}
else {for(;i<k;i++)
{if(a[0]==b[i])
for(j=1;j<t;j++){if(a[j]!=b[++i])break;else g++;}
if(g==t-1){c++;g=0;}}}
cout<<"子串个数";
cout<<c<<endl;
}
中英文通吃.
这程序对于区分大小写的时候也是不对的。试一下下“aaabcdefg"里找"aab",字串明明存在,但结果为零。实际写这个strstr()的程序需要一个state machine(大约叫状态机器或状态图)。如果不作任何特殊的内存快速操作的话复杂度是N平方所以最好不要自己写,除非想练手。
要不区分大小写的话用strstr则先把字串拷贝一下,再把每个字母变大写toupper()
用CString的话用库函数CString::MakeUpper()把整个字串变大写。
[此贴子已经被作者于2006-5-24 4:18:01编辑过]