問題01:如何把含定界符的字符串分割成多個字符串
創(chuàng)新互聯(lián)主要從事成都網站制作、成都做網站、外貿營銷網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務諸暨,10余年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220
使用basic_string中的find成員函數依次找到每個定界符,然后使用substr函數把每個子字符串復制出來。
- #include
- #include
- using namespace std;
- int main()
- {
- string s = "Name|Addr|Phone";
- char c = '|';
- string::size_type i = 0;
- string::size_type j = s.find(c, i);
- while(j != string::npos) {
- cout << s.substr(i, j-i) << endl;
- i = ++j;
- j = s.find(c, i);
- }
- cout << s.substr(i, s.length()-i) << endl;
- return 0;
- }
問題02:如何使用一組定界符把一個字符串分解成多個片段
使用basic_string的find_first_of和find_first_not_of成員函數來列舉字符串并交替地定位下一個特征符和非特征符。
- #include
- #include
- using namespace std;
- int main()
- {
- string s = "Name:Addr;Phone";
- string d = ":;";
- string::size_type i = s.find_first_not_of(d, 0);
- string::size_type j = s.find_first_of(d, i);
- while(i != string::npos && j != string::npos) {
- cout << s.substr(i, j-i) << endl;
- i = s.find_first_not_of(d, j);
- j = s.find_first_of(d, i);
- }
- cout << s.substr(i, s.length()-i) << endl;
- return 0;
- }
問題03:如何在字符串中查找字符
使用basic_string的find成員函數,幾乎所有以單詞"find"開始的函數。每一個函數都有一個basic_string::size_type參數pos,它用來讓你能指明查找開始處的索引。函數返回值為basic_string::size_type,如果查找成功,返回值即為目標索引,如果查找失敗,返回值為basic_string::npos。
- find();
- rfind();
- find_first_of();
- find_first_not_of();
- find_last_of();
- find_last_not_of();
問題04:如何字符串中查找字符串
你可以使用定義在
問題05:如何比較兩個字符串是否相同
你可以使用定義在
問題06:如何統(tǒng)計文本文件中不同類型字符的數目
使用輸入流讀字符,一次一個,隨著你讀到的字符,增加相應的統(tǒng)計。判斷函數可以使用
- isalpha();
- isdigit();
- isupper();
- islower();
- isxdigit();
- isspace();
- iscntrl();
- ispunct();
- isalnum();
- isprint();
- isgraph();
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- int main()
- {
- fstream in("sample.txt", ios::in | ios::binary);
- map
cmap; - char cur;
- while(in.get(cur)) {
- if(isalpha(cur))
- ++cmap["alpha"];
- else if(isdigit(cur))
- ++cmap["digit"];
- else if(ispunct(cur))
- ++cmap["punct"];
- else
- ++cmap["other"];
- }
- map
::iterator iter = cmap.begin(); - for( ; iter != cmap.end(); ++iter)
- cout << iter->first << " : " << iter->second << endl;
- return 0;
- }
問題07:如何使你的文本右對齊或左對齊
使用流和標準流的格式標志右和左,他們都是定義在
- out.setf(std::ios_base::right);
但是右對齊如果沒有設置右邊頁面的空白寬度的話就沒有意義。為了設置這個寬度,可以使用ios_base::width。
- out.width(w);
當你用完你設置的格式標志時,你應該做的是清理掉它們。否則,這些標志將影響以后使用流的用戶。
- ios_base::fmtflags flags =
- out.setf(ios_base::left); // setf returns the flags that were already there
- out.width(72);
- cout << tmp << endl;
- out.flags(flags); // reset to old flags