【小白学习C++ 教程】十七、C++ 中的字符数组和字符串常见的函数
@Author:Runsen
字符數組
char mychar[6] = {'H', 'e', 'l', 'l', 'o'};下面定義的字符串數組在 C/C++ 中的內存表示
#include <iostream>using namespace std;int main () {char mychar[6] = {'H', 'e', 'l', 'l', 'o'};cout << "mychar message: ";cout << mychar<< endl;return 0; }mychar message: Hello下面是字符數組常見的API函數
| strcat(s1, s2); | 將字符串 s2 連接到字符串 s1 的末尾。 |
| strlen(s1) | 返回字符串 s1 的長度。 |
| strcmp(s1, s2); | 如果 s1 和 s2 相同,則返回 0;如果 s1<s2,則小于 0;如果 s1>s2,則大于 0。 |
| strchr(s1, ch); | 返回指向字符串 s1 中第一次出現字符 ch 的指針。 |
| strstr(s1, s2); | 返回指向字符串 s1 中第一次出現字符串 s2 的指針。 |
在編程中,有很多情況我們需要將數字轉換為字符串或將字符串轉換為數字。
#include <iostream> #include <cstring>using namespace std;int main () {char str1[10] = "Hello";char str2[10] = "World";char str3[10];int len ;// copy str1 into str3strcpy( str3, str1);cout << "strcpy( str3, str1) : " << str3 << endl;// concatenates str1 and str2 to str4 string str4 = strcat( str1, str2);cout << "strcat( str1, str2): " << str4 << endl;// 這里str1 concatenates 變成HelloWorldcout << "strcat( str1, str2): " << str1 << endl;// total lenghth of str1 after concatenationlen = strlen(str1);cout << "strlen(str1) : " << len << endl;return 0; }strcpy( str3, str1) : Hello strcat( str1, str2): HelloWorld strcat( str1, str2): HelloWorld strlen(str1) : 10String
C++ 中由“std::string”類定義的字符串是字符流到對象中的表示。換句話說,String 類是字符串對象的集合。這個字符串類是 std 命名空間的一部分,在頭文件“string.h”中定義。
字符數組是在編譯時靜態分配的,但字符串是對象,因此可以動態分配。
由于字符數組本質上是靜態的,一旦定義它們就不能收縮或擴展。
因此,如果我們有一個大小為 100 的字符數組,并且我將它初始化為單詞“Hello”,那么剩余的空間就被浪費了。
Char mystr[100] = “hello”;在這里,剩下的 95 個位置被浪費了。
與此相反,字符串對象本質上是動態的,并且會占用值的確切空間。
字符數組的性能較快,而字符串較慢。
字符數組幾乎沒有可以操作它們的函數。但是String 類有很多函數,包括迭代器函數。
這些是字符數組和字符串對象類之間的一些基本區別。
獲取字符串的長度
要獲取字符串的長度,您可以使用 length 或 size 函數,它們是字符串類的成員,并返回字符串中的字符數:
string my_string1 = "ten chars."; int len = my_string1.length(); // or .size();搜索和子串
字符串類支持使用函數 find()、rfind() 和 substr() 進行簡單的搜索和子字符串檢索。find 成員函數接受一個字符串和一個位置,并從給定位置開始搜索字符串以查找給定字符串的第一次出現。它返回字符串第一次出現的位置
find()
字符串類支持使用函數 find()、rfind() 和 substr() 進行簡單的搜索和子字符串檢索。find 成員函數接受一個字符串和一個位置,并從給定位置開始搜索字符串以查找給定字符串的第一次出現。它返回字符串第一次出現的位置,或者一個特殊值:string::npos,表示它沒有找到子字符串。
此示例代碼在給定字符串中搜索字符串“cat”的每個實例并計算實例總數:
#include <iostream> #include <string> using namespace std;int main() {string input;int i = 0;int cat_appearances = 0;getline(cin, input, '\n');for (i = input.find("cat", 0); i != string::npos; i = input.find("cat", i)){cat_appearances++;i++;}cout << cat_appearances; } catcatcatcat 4substr
在 C++ 中,std::substr()該函數接受兩個值pos和len作為參數,并返回一個新構造的字符串對象,其值初始化為該對象的子字符串的副本。復制字符串從pos開始并完成直到pos+len表示[pos, pos+len)。
#include <iostream> using namespace std;int main() {string s1 = "Runsen";string r = s1.substr(1, 3);string r1 = s1.substr(3,2);// prints the resultcout << "String is: " << r << endl;cout << "String is: " << r1 << endl;return 0; }String is: uns String is: se此外,C++ 庫中有大量預定義的函數。
輸入功能:
- getline():該函數用于存儲用戶在對象內存中輸入的字符流。
- push_back():該函數用于在字符串的末尾輸入一個字符。
- pop_back():該函數用于刪除字符串的最后一個字符。
容量功能:
- capacity() :- 該函數返回分配給字符串的容量,該容量可以等于或大于字符串的大小。分配了額外的空間,以便在將新字符添加到字符串時,可以有效地完成操作。
- resize() :- 這個函數改變字符串的大小,大小可以增加或減少。
- length():-該函數求字符串的長度
- shrink_to_fit() :- 該函數減少字符串的容量,使其等于字符串的最小容量。如果我們確定不需要進一步添加字符,則此操作可用于節省額外內存。
迭代器函數:
- begin() :- 這個函數返回一個迭代器到字符串的開頭。
- end() :- 這個函數返回一個迭代器到字符串的末尾。
- rbegin() :- 此函數返回一個指向字符串末尾的反向迭代器。
- rend() :- 該函數返回一個指向字符串開頭的反向迭代器。
操作函數:
- copy(“char array”, len, pos) :- 該函數復制其參數中提到的目標字符數組中的子字符串。它需要 3 個參數,目標字符數組,要復制的長度和開始復制的字符串中的起始位置。
- swap() :- 此函數將一個字符串與另一個字符串交換。
練習:給定字符串的打印出所有子字符串的程序
#include <iostream> using namespace std;void subString(string s, int n) {//在外循環中選擇起始點,并為給定的起始點選擇不同字符串的長度for (int i = 0; i < n; i++)for (int len = 1; len <= n - i; len++)cout << s.substr(i, len) << endl; }int main() {string s = "abc";subString(s,s.length());return 0; }a ab abc b bc c總結
以上是生活随笔為你收集整理的【小白学习C++ 教程】十七、C++ 中的字符数组和字符串常见的函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小白学习tensorflow教程】二、
- 下一篇: 音视频通话质量哪个品牌做的更好?