日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 标准库类型string

發布時間:2025/3/12 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 标准库类型string 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

標準庫類型string

string表示可變長的字符序列,使用string類型必須首先包含string頭文件。

文章目錄

  • 一、定義和初始化string對象
  • 二、操作string對象
  • 三、處理string對象中的字符

一、定義和初始化string對象

如何初始化類的對象是由類本身決定的。

1.拷貝初始化:

使用=初始化一個變量,編譯器把等號右側的初始值拷貝到新創建的對象中去。

2.直接初始化:不使用=

string s1;//s1是一個空串,該string對象中沒有任何字符。 string s2(s1); string s2 = s1; string s3("value"); string s3 = "value";//這個字符串字面值,除了最后那個空字符以外,全部被拷貝到新建的s3對象中去。 string s4(n,'c');//string s4(6,'c');把s4初始化成,連續6個字符c組成的串。

二、操作string對象

類除了規定初始化其對象,還能夠定義對象上能執行的方法。

類既可以通過函數名調用方法,也可以定義<<、+等各種運算符在該類對象上的新含義。

1.讀寫 string 對象

在使用cin執行讀取操作時,string對象會忽略開頭空白,從第一個字符開始,到下一個空白結束。

#include<iostream> #include<string> using namespace std; int main(){string s;cin>>s;cout<<s<<endl;return 0; } //輸入: hello world //輸出:hello

2.讀取未知數量的 string 對象

string word; while(cin >> word)//沒遇到文件結束標記或者非法輸入,一直讀取cout << word << endl;

3.使用 getline 讀取一整行

如果說在最終字符串中保留輸入時的空白,使用getline函數替代>>。

函數從給定的輸入流中讀取數據,直到遇到換行符為止(換行符也被讀進來了),然后把所讀的內容存放在string對象里(這里面不存在換行符)。

如果輸入一開始就是個換行符,那么所得結果是一個空string。

string line; getline(cin, line); cout << line << endl; //getline返回它的流參數,我們也能把getline的結果作為條件。 while(getline(cin, line))//每次讀一整行,直到文件末尾。cout << line << endl;

4.string 的 empty 和 size 操作:

empty是string的一個成員函數,使用點操作符指明是那個對象執行了 empty 函數即可。

s.empty()s為空返回true,否則返回false。

while (getline(cin, line))//只輸出非空的行if(!line.empty())//如果line不為空則返回真。cout << line << endl;

size函數返回string對象的長度(字符的個數)。

while (getline(cin, line))//只輸出超過80個字符的行if(line.size() > 80)cout << line << endl;

size函數返回的是string::size_type類型的值,它是一個無符號類型的值,而且能夠存放下任何string對象的大小。

string s; cin>>s; auto len = s.size();//c++11允許通過auto來推斷變量類型 cout << len;

5.字符串字面值和string是不同的類型。

使用+運算符,必須確保每個+的兩側的運算對象至少有一個是string。

//字面值和string對象相加: string s4 = s1 + ",";//正確 string s5 = "hello" + ",";//錯誤 string s6 = (s1 + ",") + "world";//正確,對string對象使用+運算符得到一個新的string對象。

三、處理string對象中的字符

1.使用 范圍for(range for)語句處理每個字符

范圍for語句:遍歷給定序列中的每個元素并對序列中的每個值執行某種操作。

//語法形式: for (declaration : experssion)statement /* experssion: 一個對象,用于表示一個序列。 declaration: 定義一個變量,該變量用于訪問序列中的基礎元素。 statement: 對每個元素的操作。 */ string str("some words"); for (auto c : str)//對于str中的每一個字符。每次迭代,str的下一個字符被拷貝給c。cout << c << endl;//輸出當前字符并加一個換行符。

改變某個字符的特性,利用cctype頭文件中的函數,進行相應判斷:

isdigit(c);//c是數字時為真。 isalpha(c);//c是字母時為真。 ispunct(c);//c是標點符號時為真,即c不是控制字符、數字、字母、可打印空白中的一種。 toupper(c);//如果c是小寫字母,輸出對應的大寫字母,否則原樣輸出c。 ... //還有很多,請查手冊。 string s("HELLO WORLD!!!"); decltype(s.size()) punct_cnt = 0;//punct_cnt類型和s.size類型相同。 for (auto c : s)if (ispunct(c))//對于s中每個字符,如果該字符是標點符號,將標點符號計數值加一。++punct_cnt; cout << punct_cnt<< " punctuation characters in " << s << endl;

2.使用 范圍for 語句改變字符串中的字符

把循環變量定義成引用類型即可,使用引用作為循環控制變量時,這個變量被依次綁定到了序列的每個元素上。

string s("Hello World!!"); for(auto &c : s)c = toupper(c);//c是一個引用,因此賦值語句將改變s中字符的值。 cout << s << endl;//輸出:HELLO WORLD

3.只處理一部分字符

訪問string 對象的單個字符有兩種方式,一種是用下標,另一種是用迭代器。這里先介紹通過下標的方法。

  • string對象的下標必須>=0 而且 <s.size()。
  • 如果下標是帶符號類型的值,將自動轉換成由 string::size_type 表達的無符號類型。
  • 下標運算符[]接收的輸入參數是 string::size_type 類型的值,這個參數表示要訪問的字符的位置,返回值是該位置上字符的引用。
  • 不管什么時候只要對string對象使用了下標,都要確認在那個位置上確實有值。
if (!s.empty())//在訪問指定字符之前,首先檢查s是否為空。如果s為空,則s[0]的結果將是未定義的。cout << s[0] << endl;string s("some string"); if (!s.empty())s[0] = toupper(s[0]);//將字符串首字母變成大寫。 //只要字符串不是常量,就能為下標運算符返回的字符賦新值。

4.使用下標執行迭代:

for (decltype(s.size()) index = 0;index !=s.size() && != isspace(s[index]); ++index)s[index] = toupper(s[index]); //依次處理s中的字符,直至我們處理完全部字符或者遇到一個空白 //如果s是some thing,經過操作,s變成SOME thing

這里使用了:index !=s.size() && != isspace(s[index])

c++語言規定,只有左側運算對象為真,才會檢查右側運算對象。因此只有在index達到s.size()之前,才會執行s[index],這樣確保index比s.size()小。

總結

以上是生活随笔為你收集整理的c++ 标准库类型string的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。