标签:
字符串的操作多用用就行了。
在字符串相关操作中,进行字面值的处理需要用库函数,"="操作的是存储字符串的地址(基本类型)。
1、C中字符串的赋值
2、C中字符串长度和大小比较
3、C中字符串拼接
4、C中字符串的拆分
4、C中字符串与其他类型转化
sprintf()->其他格式转成字符串 和 sscanf()->字符串转成其他格式;
几个小练习:
1、字符串中去掉重复的字母:
int judge[52]={0}; string derepeat(string str){ string str_change; for(iterator it=str.begin(); it!=str.end(); ++it){ if(*it-‘a‘<26 && !judge[*it-‘a‘] && *it-‘a‘>=0 ){ //如果用strcpy(),怎么写
str_change+=*it; judge[*it-‘a‘]=1; } else if(*it-‘A‘<26 && !judge[26+*it-‘A‘] && *it-‘A‘>=0){ str_change+=*it; judge[26+*it-‘A‘]=1; } else if( (*it-‘Z‘>0 && *it-‘a‘<0) || *it-‘A‘<0 || *it-‘z‘ >0)
str_change+=*it; } return str_change; }
2、字符串压缩,输入:asdddddwerrreeeww 输出:as5dwe3r3e2w
string string_reduce(string str){ string str_change; ostringstream oss; for(string::iterator it=str.begin(); it!=str.end(); ++it){ int count=1; for(; *it==*(it+1) && it!=str.end(); ){ //iterator重载了关系运算符 ++it; ++count; } if(1==count){ //实现方法很多,这里复习下IO流的用法,也容易理解 oss << *it; } else { oss << count << *it; //格式化成字符串 } } str_change = oss.str(); //c++的string重载了赋值运算符; return string_change; }
3.字符全排列,输入:abc(默认不重复,重复的可以去重) 输出:abc acb bac bca cab cba
全排列可以看做是两位置交换而来;
void perm(char* pstr, char* pbegin){ if(*pbegin == ‘\0‘) printf("%s\n",pstr); else{ for(char* p_ch = pbegin; *p_ch != ‘\0‘; p_ch++){ swap(*pbegin,*p_ch); perm(pstr, pbegin+1); swap(*pbegin,*p_ch); } }
}
标签:
原文地址:http://www.cnblogs.com/young8848/p/4378095.html