| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3225 人关注过本帖
标题:关于子串查找的问题?
只看楼主 加入收藏
youlivirgo
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-20
收藏
 问题点数:0 回复次数:12 
关于子串查找的问题?
有一个中英文混合字符串,英文为大小写混编.如"China中国China"
现在我要查找子串,而且不区分大小写,如"a中国Ch"就是一个子串,这要怎么办啊?
如果全是英文就好做了.
搜索更多相关主题的帖子: 中国 China 大小写 英文 字符 
2006-05-21 09:05
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
C语言用函数strstr,
C++用函数string::find()
VC用CString::Find()

http://myajax95./
2006-05-21 09:55
无限忧伤
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-4-5
收藏
得分:0 
编写循环,一个一个找,估计也行.但有些麻烦.

2006-05-21 10:45
youlivirgo
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-20
收藏
得分:0 
strstr是不是区分大小写的啊!

c++新手!努力学习中!
2006-05-21 10:47
youlivirgo
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-20
收藏
得分:0 
中文怎么编写循环,一个一个找?

c++新手!努力学习中!
2006-05-21 10:48
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
做个函数吧:
你可以char c1[20]="China中国China";(函数的第一个参数)然后将他们中的字母全部大写化
(toupper(c1[i++]))然后子串(函数的第2个参数->char c2[20];)也字母全部大写化
(toupper(c2[i++]))最后再来查找返回子串在主串中的首位置

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-21 22:48
无限忧伤
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-4-5
收藏
得分:0 

我编了一个,献丑了.
#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编辑过]


2006-05-22 21:50
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以下是引用无限忧伤在2006-5-22 21:50:00的发言:

我编了一个,献丑了.
#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;
}

中英文通吃.


好象你的要区分大小写,请看看题目要求


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-22 23:02
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
以下是引用无限忧伤在2006-5-22 21:50:00的发言:

我编了一个,献丑了.
#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编辑过]


http://myajax95./
2006-05-23 03:34
无限忧伤
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-4-5
收藏
得分:0 
还是不服气,又改进了一下,打死我都不用string类,大小写问题解决了,“aaabcdefg"里找"aab"的问题也解决了.还有那里不对?哥们儿来纠正一下.
#include "iostream.h"
void main()
{
int i=0,j=0,t=0,k=0,g=0,c=0,p=0;
char a[10],b[100];
cout<<"输出总字符串"<<endl;
cin>>b;
cout<<"输出要查找的字符串"<<endl;
cin>>a;
while(a[t]!='\0')t++;
while(b[k]!='\0')k++;
for(i=0;i<k;i++)
if(int(b[i])<=90&&int(b[i])>=65)
b[i]=b[i]+'a'-'A';
for(i=0;i<t;i++)
if(int(a[i])<=90&&int(a[i])>=65)
a[i]=a[i]+'a'-'A';
if(t==1)
for(i=0;i<k;i++)
{if(a[0]==b[i])c++;}
else
{for(i=0;i<k;i++)
{if(a[0]==b[i])
{p=i;for(j=1;j<t;j++){if(a[j]!=b[++p])break;else g++;}}
p=0;
if(g==t-1){c++;}g=0;}}
cout<<"子串个数";
cout<<c<<endl;
}
在此谢过

2006-05-23 21:15
快速回复:关于子串查找的问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038614 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved