今天以一道字符串大小写的切换问题来说
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
在这道题目中间需要用到函数string函数find,关于find的具体基本用法(首先,find是string类里面的函数,要用“.”):
find(string a),返回的是子字符串在母字符串第一个字符的位置,若无所查找的子字符串,则返回string::npos,关于他的具体介绍,以后会跟上了。
这道题关键是大小写的转换,对大小写敏感可以用find函数,对大小写不敏感,用cctype里面的tolower函数转换成小写,然后比较,最后输出原来的字符串
#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;
int main(){
string children;
int kaiguan,line;
cin>>children>>kaiguan>>line;
string *zonestring=new string[line],*zonestring2=new string[line];
for(int i=0;i<line;i++){
cin>>zonestring[i];
zonestring2[i]=zonestring[i];
}
if(kaiguan){
for(int i=0;i<line;i++) if(zonestring[i].find(children)!=string::npos) cout<<zonestring[i]<<endl;
}
else{
for(int i=0;i<children.size();i++) children[i]=tolower(children[i]);
for(int i=0;i<line;i++) for(int i0=0;i0<zonestring[i].size();i0++) zonestring[i][i0]=tolower(zonestring[i][i0]);
for(int i=0;i<line;i++) if(zonestring[i].find(children)!=string::npos) cout<<zonestring2[i]<<endl;
}
delete zonestring;
return 0;
}
总的来说就是认识了string中间的的几个常用函数
1.size(),用来判断string的长度
2.find(a),用来搜索是否含有子字符串a
3.string中间的大小写转换函数tolower,toupper,在库cctype中间
此为c++复习篇
//
在此重新复习一下用char数组实现该题目,在题目中间,有时候会出现一些明显的字眼,如没有空格,只有字母,可能有些同学用char函数比较习惯
用char数组来实现此题更加方便
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char result[100];
int kaiguan,line;
cin>>result>>kaiguan>>line;
char **zonechar=new char*[line],**zonechar2=new char*[line];
for(int i=0;i<line;i++){
zonechar[i]=new char[100];
zonechar2[i]=new char[100];
cin>>zonechar[i];
strcpy(zonechar2[i],zonechar[i]);
}
if(kaiguan){
for(int i=0;i<line;i++){
if(strstr(zonechar[i],result)!=NULL) cout<<zonechar[i]<<endl;
}
}else{
strlwr(result);
for(int i=0;i<line;i++){
strlwr(zonechar[i]);
}
for(int i=0;i<line;i++){
if(strstr(zonechar[i],result)!=NULL) cout<<zonechar2[i]<<endl;
}
}
delete[] zonechar;
for(int i=0;i<line;i++) delete zonechar[i];
return 0;
}
基本思路与用string相同,再次我们复习几个函数
1.strcpy:char数组的复制函数strcpy(*char a,*char b),将b复制到a,与一般的等号不同即a=b,等号只是将b的指针指到a,strcpy是完全复制
2.strlen:char数组的长度
3.strlwr:将大写转换成小写,此函数不是标准函数库,只能在vc中使用
4.strupr:将小写转换成大写,此函数也不是标准函数库,只能在vc中间使用
(ps:对于3,4,一些同学在oj系统使用时,可能会出现这两个函数未定义的情况,此是可以自行定义)
inline char* strlwr(char * a){
char * b=a;
for(;b!='\0';b++) *b=*tolower(*a);
return b;
}//参考百度百科关于strlwr的定义
今天就写到这里,下次再来加