国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

免費制圖網站關鍵詞seo公司推薦

免費制圖網站,關鍵詞seo公司推薦,如何使用騰訊云建網站,隨身辦app下載前言:在日常的程序設計中,我們會經常使用到字符串。比如一個人的身份證號,家庭住址等,只能用字符串表示。在C語言中,我們經常使用字符數組來存儲字符串,但是某些場景(比如插入,刪除)下操作起來很…

前言:在日常的程序設計中,我們會經常使用到字符串。比如一個人的身份證號,家庭住址等,只能用字符串表示。在C語言中,我們經常使用字符數組來存儲字符串,但是某些場景(比如插入,刪除)下操作起來很繁瑣。在C++中,底層設計了一個string類,將經常使用的功能封裝在其中,使用起來非常簡單,便捷。
本文主要介紹string的使用方法和幾個常用函數,最后再列舉幾個經典例題。
我們使用string時經常會用到它封裝的函數,這里推薦一個網站:C++ Reference。函數忘了怎么使用時可以參考該網站。

目錄

  • 一.介紹
  • 二.使用
    • 1.創(chuàng)建一個字符數組存儲字符串hello world:
    • 2.截取部分字符串
    • 3.從鍵盤上輸入
  • 三.常用重載運算符和函數
    • 1.+/+=
    • 2.size()
    • 3.capacity()
    • 4.reserve()
    • 5.[]運算符(遍歷string)
    • 6.push_back()(尾部插入一個字符)
    • 7.append() (尾部插入一段字符串)
    • 8.insert() (頭部插入)
  • 四.迭代器
    • 1.iterator 正向迭代器(重點)
    • 2.reverse_iterator 反向迭代器
    • 3.reverse函數(字符串逆置神器)
  • 五.例題
    • 1.字符串相加
    • 2.字符串最后一個單詞長度
    • 3.反轉字符串中的單詞 III

一.介紹

長話短說,不將它講的太神秘:
string是用字符的順序數組實現的類,用于管理字符數組。
我們平常怎么使用自定義的類,就怎么使用string。

二.使用

1.創(chuàng)建一個字符數組存儲字符串hello world:

格式:string 對象("字符或字符串")
1.形如string str2("hello world"),實際上就是調用string類的構造函數初始化對象str2.
2.string類中有流提取流插入運算符重載,可以直接輸出或者輸出string類型數據。

//C語言
char str1[] = "hello world";
//C++
string str2("hello world"); //構造函數
string str3("#");  //單個字符
cout << str2 << endl; //string類中有流提取流插入運算符重載,可以直接輸出或者輸出string類型數據。

控制臺輸出如下:
在這里插入圖片描述

2.截取部分字符串

string類對此也進行了設計:第一個參數為截取string對象,第二個為需要截取部分的起始下標,第三個參數為截取字符個數(單位是字節(jié));
在這里插入圖片描述

如下代碼:想截取s1對象中的world給給s2,w的下標為6(第二個參數),world有5個字符(第三個參數)

int main()
{string s1("hello world");string s2(s1, 6, 5); //截取s1對象中的world給給s2cout << s2 << endl;
}

控制臺輸出如下,可以看到截取成功了:
在這里插入圖片描述

3.從鍵盤上輸入

這里就可以體現string的優(yōu)點:
使用C語言,我們需要考慮給字符數組開多大的空間,而string不用我們考慮這點,我們只管輸入,編譯器會自動幫我們適配合適的空間。

int main()
{string s1; //實例化一個對象s1cin >> s1; // 輸入cout << s1 << endl; //打印return 0;
}

如下:前兩行為從鍵盤上輸入的,后兩行為打印的。
在這里插入圖片描述

三.常用重載運算符和函數

string函數設計的接口,感興趣的可以去文章開頭給的網站看看。下面某些函數只給出常用的接口。

1.+/+=

單從這個題目,就能讓你感受到string的魅力!

請看題目:從鍵盤上輸入兩個字符串,要求將后一個字符串拼接到前一個字符串后面,輸出拼接后的前一個字符串。(字符串長度不超過50字節(jié))
從C語言角度考慮:首先我們要開兩個不小于50字節(jié)的字符數組,之后簡單一點的就是使用strcat函數拼接。但是strcat函數長久不用我忘掉了呢,還要再去翻看筆記回憶。

C++string類對+運算符進行了重載,這個+的本質就是尾插

int main()
{string s1, s2;cin >> s1 >> s2;s1 = s1 + s2;  //s1,s2順序不能顛倒//s1 += s2; //使用+=也可以cout << s1 << endl;return 0;
}

控制臺輸出如下:其中第一行為輸入的s1,第二行為輸入的s2,第三行為拼接后的s1
在這里插入圖片描述

2.size()

返回string對象的有效字符長度(不包括\0),相當于C語言的strlen。

int main()
{string s1("hello world");cout << s1.size() << endl;return 0;
}

控制臺輸出如下:
在這里插入圖片描述

3.capacity()

返回string對象的容量
我們知道string會自動擴容,而它當然不是一個一個字節(jié)闊的,它是按照一定倍率擴容。

int main()
{string s1("hello world");cout << "size:" << s1.size() << endl;cout << "capacity:" << s1.capacity() << endl;return 0;
}

控制臺輸出如下:可以看到有效字符大小為11字節(jié),容量為15字節(jié)。
在這里插入圖片描述

4.reserve()

reserve——保留(不要把它當成reverse(逆置))
功能:請求容量的變化
價值:如果確定大概需要開多大的空間,可以提前開好,減少擴容,提高效率。(擴容是有代價的,特別是異地擴容,需要拷貝舊空間的數據移到新空間)

int main()
{string s1("hello world");cout << "size:" << s1.size() << endl;cout << "原capacity:" << s1.capacity() << endl;s1.reserve(100);cout << "新capacity:" << s1.capacity() << endl;return 0;
}

控制臺輸出如下:
在這里插入圖片描述

5.[]運算符(遍歷string)

string類對[]運算符進行了重載,使得我們可以借助[]像訪問數組一樣訪問string。對于解決一些與字符串有關的題很有幫助。

以遍歷string為例:

int main()
{string s1("hello world");for (size_t i = 0; i < s1.size(); i++) //運用size()函數{cout << s1[i] << " ";  //下標訪問}return 0;
}

控制臺輸出如下:
在這里插入圖片描述

6.push_back()(尾部插入一個字符)

在string對象尾部插入一個字符

int main()
{string s1("hello world");s1.push_back('x');cout << s1 << endl;return 0;
}

控制臺輸出如下:
在這里插入圖片描述

7.append() (尾部插入一段字符串)

形式:append(字符串/string對象)
實際上設計的有些冗余,插入的話我們直接用+=就行了,何必再使用append函數呢?

int main()
{string s1("hello world");string s2("!!!");s1.append("xxx");s1.append(s2);cout << s1 << endl;return 0;
}

控制臺輸出如下:
在這里插入圖片描述

8.insert() (頭部插入)

插入一個字符:
1.常規(guī)做法:s.insert(起始位置下標,插入個數,要插入字符)
2.迭代器做法:s.insert(s.begin(),要插入字符)

int main()
{string s1("hello world");string s2("hello world");string s3("hello world");s1.insert(1,1,'x'); // 在h后插入一個xs2.insert(1, 2, 'x'); // 在h后插入兩個x s3.insert(s3.begin(), 'x'); // 頭插x cout << "s1 = " << s1 << endl;  //hxello worldcout << "s2 = " << s2 << endl;  //hxxello worldcout << "s3 = " << s3 << endl;  //xhello worldreturn 0;
}

插入一段字符串:s.insert(起始位置下標,字符串)

int main()
{string s1("hello world");s1.insert(1,"xx");cout << s1 << endl; //hxxello worldreturn 0;
}

四.迭代器

1.iterator 正向迭代器(重點)

函數名作用(下面函數僅適用于正向迭代器!!!)
begin()返回string開頭的地址
end()返回string最后一個有效字符的下一個位置的地址(一般都是\0

iterator是迭代器的意思,它封裝在string類中(list,樹等數據結構中都有迭代器),故而使用時要受string類域限制,要寫成string::iterator形式。使用時可以將它想象成一個指針來理解。

借助迭代器遍歷string:

int main()
{string s1("hello world");string::iterator str = s1.begin();//auto str = s1.begin(); 寫成這樣也可以,auto是類型指示符,可以根據begin推出正向迭代器while (str != s1.end())  {cout << *str << " ";++str;}cout << endl;return 0;
}

控制臺輸入如下:
在這里插入圖片描述

在這里插入圖片描述
上述代碼借助begin()函數返回開始位置的迭代器,end()指向最后一個字符下一個位置(此處就是\0)。

問:可這樣子不就是單純的指針遍歷嗎,何必那么麻煩還使用迭代器?
答:迭代器的一個特點就是通用性,在vector,list,樹等中都有迭代器。就以list舉例,它是由一個一個的小結點組成的,物理空間中并不是連續(xù)的,使用結點指針++并不能找到它的下一個結點,但是像上述代碼一樣套上迭代器就可以遍歷list。因此,迭代器遍歷才是最主流的遍歷方式。

2.reverse_iterator 反向迭代器

函數名作用(下面函數僅適用于反向迭代器!!!)
rbegin()返回string最后一個有效字符的下一個位置的地址(一般都是\0
rend()返回string開頭的地址

顧名思義,跟正向迭代器相反,reverse_iterator是反正使用的。

借助反向迭代器倒著遍歷string:

int main()
{string s1("hello world");string::reverse_iterator str = s1.rbegin();//auto str = s1.rbegin(); 寫成這樣也可以,auto是類型指示符,可以根據rbegin推出反向迭代器while (str != s1.rend()){cout << *str << " ";++str;}cout << endl;return 0;
}

控制臺輸入如下,可以看到它是倒著遍歷的:
在這里插入圖片描述

補:const迭代器:const_iterator const_reverse_iterator
總計共有4種迭代器。

3.reverse函數(字符串逆置神器)

傳入迭代器區(qū)間: reverse(s.begin(),s.end());

int main()
{string s1("hello world");reverse(s1.begin(), s1.end()); //傳入迭代器區(qū)間cout << s1 << endl;return 0;
}

控制臺輸出如下:
在這里插入圖片描述

五.例題

1.字符串相加

點擊鏈接

高精度,不能用整型或長整型直接相加。
運用string一位一位相加進位。

class Solution {
public:string s;string addStrings(string num1, string num2) {int end1 = num1.size()-1,end2 = num2.size()-1;int ret = 0,sum = 0;while(end1 >= 0 || end2 >= 0){int n1 = end1>=0?num1[end1]-'0':0;int n2 = end2>=0?num2[end2]-'0':0;sum = n1+n2+ret;ret = sum/10;s += sum%10+'0';--end1;--end2;}if(ret == 1)s += '1';reverse(s.begin(),s.end());return s;}
};

2.字符串最后一個單詞長度

1.??鸵^文件 < string >
2.rfind()若沒找到,返回無符號的-1
3.string::npos == 無符號的-1
4.注意只有一個單詞的情況

#include <iostream>
#include<string>
using namespace std;
int main()
{string s1;getline(cin,s1);size_t eblack = s1.rfind(' '); //倒著找第一個空格,沒找到返回無符號的-1if(eblack != string::npos){cout << s1.size()-(1+eblack); //下標-1}else {cout << s1.size();}return 0;
}

3.反轉字符串中的單詞 III

點擊鏈接

運用迭代器reverse函數

class Solution {
public:string reverseWords(string s) {int i = 0,k = 0;while(s[i]!='\0'){if(s[i] == ' ') //找空格{reverse(s.begin()+k,s.begin()+i); //借助reverse反轉單詞k = i + 1;}i++;}reverse(s.begin()+k,s.end()); //反轉僅有或僅剩一個單詞的情況return s;}
};

文末BB:對哪里有問題的朋友,盡管在評論區(qū)留言,若哪里寫的有問題,也歡迎朋友們在評論區(qū)指出,博主看到后會第一時間確定修改。最后,制作不易,如果對朋友們有幫助的話,希望能給博主點點贊和關注.
在這里插入圖片描述

http://m.aloenet.com.cn/news/33743.html

相關文章:

  • 中國做的電腦系統(tǒng)下載網站免費大數據網站
  • wordpress怎么修改文字白楊seo教程
  • 甘肅省城鄉(xiāng)與住房建設廳網站怎么網站推廣
  • 徐州網站建設方案推廣網址查詢注冊信息查詢
  • 用新域名做網站排名快嗎上海外貿seo
  • 怎么模仿別人做網站臺州專業(yè)關鍵詞優(yōu)化
  • 公司官網網站如何建立朋友圈的廣告推廣怎么弄
  • 做網站用js的好處seo的中文含義是
  • 丹陽網站建設服務網絡銷售是什么
  • 網站的做網站公司哪家好鄭州百度推廣代運營
  • 星空影視文化傳媒制作公司網站seo綜合診斷
  • 日本男女做受網站公司專業(yè)網站建設
  • 上海網頁設計班咸寧網站seo
  • 廣州網站建設怎么做福清市百度seo
  • 網站備案阿里云流程seo網站推廣杭州
  • 做曖暖的免費網站windows優(yōu)化軟件排行
  • 免費最好網站建設百度明星搜索量排行榜
  • 網絡技術網站seo在線培訓課程
  • 營銷型網站的推廣社區(qū)推廣
  • 做柜子網站營銷型企業(yè)網站推廣的方法有哪些
  • 域名經紀公司推薦關鍵詞優(yōu)化建議
  • 政府部門網站方案公司建網站需要多少錢
  • 查詢網站備案時間查詢seo建站要求
  • 廣州做網站建設哪家專業(yè)分銷系統(tǒng)
  • 做jsp動態(tài)網站需要的步驟鴻科經緯教網店運營推廣
  • 免費注冊163成都seo招聘信息
  • 許昌企業(yè)網站建設5118數據分析平臺
  • 程序員公司seo診斷書案例
  • 獨立網站做外貿報價青島谷歌seo
  • 網站宣傳方案新手seo入門教程