字符与字符串
strncpy(a,b,5); a[5]='\0'; char a[10]; memset(a,'#',sizeof(a)); a[10]='\0'; 刚开始学C/C++时,一直对字符串处理函数一知半解,这里列举C/C++字符串处理函数 ,希望对初学者有一定的帮助。 C: char st[100]; 1. 字符串长度 strlen(st); 2. 字符串比较 strcmp(st1,st2); strncmp(st1,st2,n); 把st1,st2的前n个进行比较。 3. 附加 strcat(st1,st2); strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加'\0'。 4. 替换 strcpy(st1,st2); strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。 5. 查找 where = strchr(st,ch) ch为要找的字符。 where = strspn(st1,st2); 查找字符串。 where = strstr(st1,st2); C++:
string str; 1. 字符串长度 len = str.length(); len = str.size(); 2. 字符串比较 可以直接比较 也可以: str1.compare(str2); str1.compare(pos1,len1,str2,pos2,len2); 值为负,0 ,正。 nops 长度到完。 3. 附加 str1 += str2; 或 str1.append(str2); str1.append(str2.pos2,len2); 4. 字符串提取 str2 = str1.substr(); str2 = str1.substr(pos1); str2 = str1.substr(pos1,len1); string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字 符串 5. 字符串搜索 where = str1.find(str2); where = str1.find(str2,pos1); pos1是从str1的第几位开始。 where = str1.rfind(str2); 从后往前搜。 6. 插入字符串 不是赋值语句。 str1.insert(pos1,str2); str1.insert(pos1,str2,pos2,len2); str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字 符。 7. 替换字符串 str1.replace(pos1,str2); str1.replace(pos1,str2,pos2,len2); 8. 删除字符串 str.erase(pos,len) str.clear(); 9. 交换字符串 swap(str1,str2); 10. C --> C++ char *cstr = "Hello"; string str1; cstr = cstr; string str2(cstr); 对于ACMer来说,C的字符串处理要比C++的方便、简单,尽量用C的字符串处理函数。 应用: 0.输入一个整数(位数不超过200位),判断是否对称数,例如:1331 ,424,12345678987654321 均为对称数,7474不是对称数.如果是对称数输出yes,否则输出no #include
#include
using namespace std; int main(){ int i,k=1,t; string s; cin>>s; t=s.length(); for(i=0;i<=t/2;i++){ if(s[i]!=s[t-1-i]){ k=0; break; } } if(k==1)cout<<"yes";else cout<<"no"; } 1.输出若干行文字的整数之和。 读入文件p1000.in: sdfkasldfasdkGASdfAd332sdf 423fsf dfs34fsdfAfdfg3932 sdfdsf232sdf432fs ksdfk234sdf g72dfsdf 输出文件p1000.out: 5691 {说明:332+423+34+3932+232+432+234+72} #include
#include
#include
using namespace std; int main(){ string s,t; freopen("p1000.in","r",stdin) ; freopen("p1000.out","w",stdout); int i,j,k,x,y; k=0; while (!cin.eof()){ getline(cin,s); for (i=0;i
57)continue; x=i; while (x
=48&&s[x]<=57)x++; t=s.substr(i,x-i); y=atoi(t.c_str()); k+=y; i=x; } } cout<
#include
#include
#include
using namespace std; int main(){ string s,a,b; getline(cin,s); int k=0; while (int(s[k])>=48 &&int(s[k])<=57)k++; a=s.substr(0,k); int x=s.find("="); b=s.substr(k+1,x-k-1); int num1= atoi(a.c_str()); int num2= atoi(b.c_str()); int num; switch (s[k]){ case '+':{num=num1+num2;break;} case '-':{num=num1-num2;break;} case '*':{num=num1*num2;break;} case '/':{num=num1/num2;break;} default:break; } cout <
#include
using namespace std; int f(char u){//判断是否标点符号 string p=", ;?!."; int i; for(i=0;i
0){ k=0;//从开头下标为0的首位开始 while(f(s[k])&&k