说明:上节着重解释了字符串处理的库函数处理,这节将针对一些常用的需求,进行非库函数的处理。
一.去除某一个字符串中的某个字符
1.去除字符串右边的空格
1 void trimStrRightSpace(char * str) 2 { 3 while(*str) 4 str++; 5 while(*(--str) == ' ') 6 *str = ' '; 7 }
2.去除字符串左边的空格
1 void trimStrLeftSpace(char * str) 2 { 3 char *t= str; 4 if(*t != ' ' ) 5 return; 6 while(*t ==' ') 7 t++; 8 while((*str++ = *t++)) 9 ; 10 }
3.去除所有的空格
1 void trimStrSpace(char *str) 2 { 3 char *t = str; 4 while(*str) 5 { 6 if(*str != ' ') 7 *t++ = *str; 8 str++; 9 } 10 *t=' '; 11 }
值得注意的是,可以将上述代码中的空格替换成任意单个字符以实现对某个字符串去掉所有的某个字符的功能,并且可以将最终的字符串返回,如下代码:
1 char* charremove(char *p) 2 { 3 char *t = p; 4 char *q = p; 5 while(*t) 6 { 7 if(*t != ' ' && *t != ' ') 8 //去除某段字符串中的任意字符 9 *p++ = *t; 10 t++; 11 } 12 *p = ' '; 13 return q; 14 }
二.字符串的翻转
方案1:
1 void reverse(char *str) 2 { 3 char *start = str; 4 char *end = start + strlen(str)-1; 5 while(start < end) 6 { 7 *start = *start ^*end; 8 *end = *start ^*end; 9 *start = *start ^*end; 10 start++; 11 end--; 12 } 13 }
方案2:
1 void reverse(char *str,char*buf) 2 { 3 if(*str == ' ') 4 return; 5 reverse(str+1,buf); 6 strncat(buf,str,1); 7 }
三.随机字符串的生成
1 string generatestring() 2 { 3 string str1; 4 string str("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); 5 int c = (rand()%62); 6 cout<<c<<endl; 7 //打印生成字符串中的字符个数 8 for(int i = 0;i < c;i++) 9 { 10 int d = rand()%62; 11 str1 += str[d]; 12 } 13 return str1; 14 }
如下,要求随机生成 10 个字符串,并对其进行排列,排列规则由 cmp 函数决定(以ASCII 值得大小进行比较)。需要注意的是,利用上述函数生成随机字符串时需要在主函数中调用随机函数种子。
1 #include <iostream> 2 #include<vector> 3 #include<algorithm> 4 #include<time.h> 5 using namespace std; 6 7 string generatestring() 8 { 9 string str1; 10 string str("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); 11 int c = (rand()%62); 12 cout<<c<<endl; 13 for(int i = 0;i < c;i++) 14 { 15 int d = rand()%62; 16 str1 += str[d]; 17 } 18 return str1; 19 } 20 21 bool cmp(string a, string b) 22 { 23 return a < b; 24 } 25 26 int main() 27 { 28 srand(time(NULL)); 29 string str1,str2; 30 vector<string> vec(10); 31 generate(vec.begin(),vec.end(),[](){return generatestring();}); 32 sort(vec.begin(),vec.end(),cmp); 33 for(string it:vec) 34 cout<<it<<" "; 35 return 0; 36 } 37