C++初學(xué)者指南第一步---11.字符串(基礎)

admin2024-06-21  14

C++初學(xué)者指南第一步—11.字符串(基礎)

文章目錄

  • C++初學(xué)者指南第一步---11.字符串(基礎)
    • 1. std::string
    • 2. char = std::string的元素類(lèi)型
    • 3. std::string字符串操作
    • 4. 字面量
      • 4.1 C風(fēng)格字符串字面量
      • 4.2 "std::string 字面量"s (C++14)
      • 4.3 字面量拼接
      • 4.4 原始字符串字面量
    • 5. 類(lèi)似字符串的函數參數
    • 6. std::getline 庫函數

1. std::string

  • char類(lèi)型的動(dòng)態(tài)數組(類(lèi)似于 vector)。
  • 可以使用"+“或”+="連接。
  • 使用下標[索引]方式進(jìn)行單字符訪(fǎng)問(wèn)。
  • 可修改的(“可變的”)與 Python 或 Java 中不同。
  • 常規的:可深度復制,可深度比較。
#include <string>
std::string hw = "Hello";
std::string s = hw;     // copy of hw
hw += " World!";
cout << hw << '\n';     // Hello World!
cout << hw[4] << '\n';  // o
cout << s << '\n';      // Hello

運行上面代碼

2. char = std::string的元素類(lèi)型

  • 一個(gè)char可以容納一個(gè)字符
  • char是最小整數類(lèi)型(通常為 1 字節)
  • 字符必須用單引號括起來(lái):‘a(chǎn)’, ‘b’, ‘c’, …
char c1 = 'A';   
char c2 = 65;  // ASCII code of 'A'
cout << c1 << '\n';          // A
cout << c2 << '\n';          // A
cout << (c1 == c2) << '\n';  // 1
std::string s = "xyz"; 
s[1] = c1;
cout << s << '\n';           // xAz
s += c2;
cout << s << '\n';           // xAzA

運行上面代碼

特殊字符(反斜杠 \ 用作轉義字符)

特殊字符說(shuō)明示例
\n換行符“Line1\nLine1\nLine3”
\ttab制表符“Column1\tColumn1\tColumn3”
\’單引號“he said ‘quote’ to me”
\反斜杠“C:\Users\me\hello.cpp”

3. std::string字符串操作

C++初學(xué)者指南第一步---11.字符串(基礎),在這里插入圖片描述,第1張
std::string接口速查表
C++初學(xué)者指南第一步---11.字符串(基礎),在這里插入圖片描述,第2張

4. 字面量

'a'?// 字符型字面量

4.1 C風(fēng)格字符串字面量

auto a = "seven of";  // a的類(lèi)型是 char const[]
auto b = a;           // b 指的是與 a 相同的對象
a += " nine";            //  編譯錯誤:不能修改
auto c = "al" + "cove";  //  編譯錯誤
std::string s = a;    // a 被拷貝進(jìn) s
s += " nine";         //  正確(s 是 std::string)

運行上面代碼

4.2 "std::string 字面量"s (C++14)

#include <string>
using namespace std::string_literals;
auto s1 = "seven of"s;  // s1的類(lèi)型是 std::string
auto s2 = s1;           // s2 是 s1的拷貝
s1 += " nine";          // 
cout << s1 << '\n';     // seven of nine
cout << s2 << '\n';     // seven of
auto s3 = "uni"s + "matrix"s;  // 
cout << s3 << '\n';     // unimatrix

運行上面代碼

4.3 字面量拼接

只有被空白字符分隔的字符串字面量會(huì )被連接起來(lái):

"first" "second" ??? "first second"
std::string s = 
  "This is one literal"
  "split into several"
  "source code lines!";

4.4 原始字符串字面量

優(yōu)勢:可以使用特殊字符而無(wú)需轉義

R"(raw "C"-string c:\users\joe)"	          char const[]	C++11
R"(raw "std"-string c:\users\moe)"s	          std::string   C++14
語(yǔ)法:?R"DELIMITER(characters…)DELIMITER"

DELIMITER(定界符,用于表明字符串的開(kāi)始和結束)可以是0到16個(gè)字符的序列,但不能包含空格、(、)和\。

5. 類(lèi)似字符串的函數參數

注意:std::string_view被用于只讀參數(C++17)

  • 輕量級(= 復制成本低,可以按值傳遞)
  • 非所有者(= 不負責分配或釋放內存)
  • 只讀視圖(= 不允許修改目標字符串)
  • 字符串類(lèi)似對象(std::string / “l(fā)iteral” / …)
  • 主要用例:只讀的函數參數
#include <string>
#include <string_view>
int edit_distance (std::string_view s1, std::string_view s2) { … }
std::string input = "abx";
int dist = edit_distance("abc", input);
  • 在將字符串字面量傳遞給函數時(shí),避免使用開(kāi)銷(xiāo)很大的臨時(shí)字符串
  • 通過(guò)避免一層間接訪(fǎng)問(wèn),可以加快訪(fǎng)問(wèn)速度:
    C++初學(xué)者指南第一步---11.字符串(基礎),在這里插入圖片描述,第3張
如果你…使用的參數類(lèi)型
在函數里總是需要一個(gè)輸入字符串的拷貝。std::string “按值傳遞”
想要只讀訪(fǎng)問(wèn):
不需要(總是)復制
使用C++17或C++20
#include <string_view>
std::string_view
想要只讀訪(fǎng)問(wèn):
不需要(總是)復制
使用C++98或C++11
std::string const&
“用常量引用傳遞參數”
想要函數修改字符串
應該盡量避免這樣的輸出參數
std::string &
傳遞std::string的(非常量)引用

6. std::getline 庫函數

  • 一次讀取整行/整塊文本
  • 目標字符串可以重復使用(節省內存)
std::string s;
getline(std::cin, s);        // 讀取整行
getline(std::cin, s, '\t');  // 讀取直到遇到tab結束
getline(std::cin, s, 'a');   // 讀取直到遇到'a'結束

附上原文鏈接
如果文章對您有用,請隨手點(diǎn)個(gè)贊,謝謝!^_^

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲空間服務(wù),不擁有所有權,不承擔相關(guān)法律責任。如若轉載,請注明原文出處。如若內容造成侵權/違法違規/事實(shí)不符,請聯(lián)系SD編程學(xué)習網(wǎng):675289112@qq.com進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!
一级毛片在线一区二区-亚洲精品无码专区土豆网在线播放-亚洲无乱码一区二区三区-亚洲一区二区三区精品