程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的string系列--string的初始化、刪除、轉大小寫(construct erase upper-lower)

實戰c++中的string系列--string的初始化、刪除、轉大小寫(construct erase upper-lower)

編輯:C++入門知識

實戰c++中的string系列--string的初始化、刪除、轉大小寫(construct erase upper-lower)


string是有迭代器設計模式的,我還沒有體會到迭代器帶給我的好處,很多時候使用類似數組索引的方法就可以完成任務。

場景1:刪除string所有的大寫字母
這裡用到erase方法:

#include  
#include  
#include  
using namespace std;  
int main()  
{
    string str = "This IS A  trick";  

    for(string::iterator iter = str.begin();  iter != str.end();++iter){  
          if(isupper(*iter)){  
           str.erase(iter);  
           --iter;  
      }   
 }  
 for(string::iterator iter = str.begin();  
  iter != str.end();++iter)  
  cout<<*iter<<" ";  
 return 0;  
}  

上面的代碼會錯誤,原因之前博客《沒有躲過的坑–vector使用erase後迭代器變成野指針》說過,即erase後,迭代器指向的位置。

場景2:初始化string
之前博客討論過string的初始化問題,朝花夕拾:

#include
#include
using namespace std;
int main()
{
    string s = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" + 'A';
    int t = 'A';
    string s1 = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" + t;
    cout << t << endl;
    cout << s << endl;
    cout << s1 << endl;
    return 0;
}

輸出結果出乎意料:
65
tuvwxyz
tuvwxyz

這裡需要提醒的是弄清楚字符和字符串的區別,千萬別把雙引號寫成了單引號。
原因:
char 類型轉成整形
對const char *進行指針偏移後的指針傳給string的構造函數

場景3:string中的字母轉大小寫
常規的for循環就不寫了,直接寫一個很少用到的:

#include   
#include   
using namespace std;  

int main()  
{  
    string str = "heLLo";  //可以不包含

    transform(str.begin(), str.end(), str.begin(), toupper);  
    cout<
    cout<

這裡需要注意的是,cout不能直接輸出string。
這就引出個重要的話題,不包含string頭文件,string可以用;包含string頭文件,string也可以用?
我猜想是標准庫不斷更新的原因,也為了兼容之前的老版本

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved