今天以一道字符串大小写的切换问题来说
给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
在这道题目中间需要用到函数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的定义
今天就写到这里,下次再来加