字符串相关操作

字符串的操作多用用就行了。

在字符串相关操作中,进行字面值的处理需要用库函数,"="操作的是存储字符串的地址(基本类型)。 

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(string::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  

  举个例子,abc的全排列可以看做a与(bc)的交换,而bc的全排列又可以看做b与c交换;  已测试

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);  
        }  
    }  
}

 

posted @ 2015-03-30 21:19  小白干  阅读(126)  评论(0编辑  收藏  举报