1. ホーム
  2. C++

C++ - 文字列クラス超詳細紹介

2022-02-11 07:45:28

(本文中の誤りは修正済みです、ご自由に訂正してください ありがとうございました)

STLの意味 標準テンプレートライブラリ

<ブロッククオート

STL の内容。

  • コンテナ:データの保存場所
  • アルゴリズム:データ構造に関連するアルゴリズム、汎用アルゴリズム(データ構造に関連しない)。

注:一般的なアルゴリズムのソート逆引きに慣れておくこと

  • イテレータ:アルゴリズムとコンテナの関連性
  • アダプター:アダプターケーブルに似たもので、アップルケーブルがアンドロイドケーブルに接続するもの
<ブロッククオート

コンテナ

シーケンシャルコンテナ(リニア構造)

の文字列を表示します。

の配列になります。C11 静的順序表

vector: ダイナミックシーケンシャルテーブル

list: ヘッドノードを持つ双方向の循環型チェーンテーブル

deque: 動的な二次元配列

forward_list: ヘッドノードを持つ循環型シングルリンク・テーブル

スタック: スタック

queue: キュー

<ブロッククオート

文字列クラス: クラスによる文字列の動的管理

下:char型文字の要素を持つ順次表構造体


string クラスの共通コンストラクタです。

  • string str - 空の文字列クラス・オブジェクト、すなわち空の文字列を構築します。
  • string str(str1)--str1はstrと同じです。
  • string str("ABC")--str="ABC" に相当します。
  • string str("ABC",strlen) -- strに格納された"ABC"に相当、最大strlenバイトまで。
  • string str("ABC",stridx,strlen)--str に格納されている "ABC" の stridx 位置を文字列の先頭とするのと等価で、最大 strlen バイトまでです。
  • string str(srelen,'A')--strlen 'A'をstrに格納する。
// small example of usage
#include<iostream>
using namespace std;

int main() {
	string s1; //empty string
	string s2(10,'$'); //ten $
	string s3("hello world"); //hello word

	cout << s3.size << endl;
	cout << s3.length << endl; //all for string length 11
	cout << s3.capacity << endl; //Seek the capacity of s3

	s3.clear(); //clear
	string s4(s3); //s4 is the same as s3
}

注意:文字列クラスを使用する場合、ヘッダーファイルとusing namespace stdをインクルードする必要があります。


文字列の共通メンバー関数

代入関数です。

  • スト . assign("ABC")- 文字列をクリアして、"ABC" に設定します。
  • スト . assign("ABC",2)- 文字列をクリアして、2文字を残して"AB"に設定します。
  • str . assign("ABC",1,1)--文字列をクリアし、位置1から"ABC"にセットして1文字保持する。
  • str . assign(5, 'A') - 文字列をクリアすると、文字列に5つの 'A' が設定されます。

  • スト . length() - 文字列の長さを調べる
  • ストリング . size() - length() と同じです。
  • ストリング . capacity() - メモリを増やすことなく使用できる文字数を含む容量を取得します。
  • str .リサイズ (10)-現在のstrのサイズを10に設定します、もしサイズが現在の文字列の長さより大きい場合、 \0 はそれを埋めます。
  • str .リサイズ (10,char c)-現在のstrのサイズを10に設定、もしサイズが現在の文字列の長さより大きければ、ワード0文字cがそれを埋めます
  • str.reserve(10)-strの容量を10に設定し、データで埋めないようにする。
  • str.swap(str1) - スワップ str1 str の文字列を使用します。
  • str.push_back('A') - strの末尾に文字'A'を追加、引数は文字形式であること。
  • str.append("ABC")--strの末尾に文字列"ABC"を追加、引数は文字列形式であること。

挿入機能のメソッドです。 

  • str.insert(2,3,'A') - 2のstr添え字に3文字'A'を追加します。
  • str.insert(2,"ABC")--2 の str 添え字に文字列 "ABC" を追加します。
  • str.insert(2,"ABC",1) - strが2で添え字された位置の文字列"ABC"に1文字を追加します。
  • str.insert(2,"ABC",1, 1 ) - 文字列 "ABC" の位置 1 から 1 文字を 2 の str 添え字に追加します。

注:太字の 1 は  文字列::npos これは、この時点の最大値で、1位からすべての文字が続きます

  • str.insert( iterator pos, size_type count, CharT ch )-イテレータchが指す位置posにcount文字をstrに挿入します。

s4.insert(++str1.begin(),2,'a'); 結果:s4.insert(++str1.begin(),2,'a'): ABCD -> AaaBCD

  • str.insert( iterator pos, InputIt first, InputIt last )--in str, pos position str1 の開始位置から終了位置まで挿入する。

s4.insert(s4.begin(),str1.begin(),str1.end()); 結果:s4.begin(),str1.begin(),str1.end())。ABCD str1: abc -> abcABCD


  • str.erase(2) - 添え字 2 の先頭とそれ以降をすべて削除します。
  • str.erase(2,1)-delete 添え字2のスタート、その次の1 Delete
  • str.clear()--strを全て削除する。
  • str.replace(2,4,"abcd")- 添え字の2から、4バイトを"abcd"に置き換えます。
  • str.empty() - null

逆転現象に関連する

(ヘッダーファイル <algorithm> にあります)

  • reverse(str.begin(),str.end()) - strの開始文字と終了文字を反転させる。 

reverse(s4.begin,s4.end); 結果: s4: ABCD -> DCBA


関連するものを探す

を探す 正常に返された場所 を検索します。 失敗 は、その 戻り値 -1

find関数です。 から ヘッダールックアップ 探す

  • str.find('A') - 'A'を検索します。
  • str.find("ABC")-find "ABC"

int n = s4.find("ABC"); s4: ABCD -> n = 0

  • str.find('B',1)-1番目の位置から'B'を探す。
  • str.find("ABC",1,2)-1 の位置から、'ABC' の最初の 2 文字を探し始める。

rfind関数です。 から テールルックアップ 探す

  • str.rfind('A') - 'A'を検索します。
  • str.rfind("ABC")-find "ABC"

int n=s4.rfind("ABC"); s4: AAAABCD -> n = 3

  • str.rfind('B',1)-1の位置から、'B'に向かって進む。
  • str.rfind("ABC",1,2)-1 の位置から、'ABC' の最初の 2 文字を前方に探し始める。

find_first_of()関数です。

を見つけることができます。 を含むかどうか があります。 部分文字列に含まれるいずれかの文字

  • str.find_first_of("abBc")-str、"abBc"と同じ文字を探し、その中の位置を返します。
  • str.find_first_of("abBc",1)-位置1から順に"abBc"と等しい文字を検索し、それが"abBc"にあればその位置を返します。
  • str.find_first_of("abBc",1,2)-最初の2文字が "abBc" と同じ文字をstr、1から始めて、 "abBc", "abBc" quot;abBc" であればその位置を返します。

find_last_of()関数です。

find_first_not_of () は、部分文字列の末尾から始めて前に進み、いずれかの文字が含まれているかどうかを調べます。

  • str.find_last_of("abBc")-strと前方で"abBc"と同じ文字を探す、ある場合はその位置を返す。
  • str.find_last_of("abBc",1)- "abBc" と str に等しい文字を、位置1から始めて順次探し、 "abBc" の中に文字があればその位置を返します。
  • str.find_last_of("abBc",10,2)- 10の位置から始めて、"abBc"とstrに等しい文字を探し、最初の2文字まで進む;"abBc"に何かあれば、その位置を返す。

に関連するコピーです。

  • str1=str.substr(2)- サブストリングを抽出し、末尾に添え字2をつけたstrを抽出し、str1を与える。
  • str1=str.substr(2,3)--部分文字列を抽出し,strの添え字を2から始めて3バイト抽出し,str1を与える。
  • const char* s1=str.data() - 文字列クラスを文字列の配列に変換して s1 に返す

char* s=new char[10] です。

  • str.copy(s,count,pos)-str の位置 pos から count 文字をコピーして s に格納する。

関連する関数の比較:(VS2013で検証した結果、エラーが修正されましたが、まだある場合はご指摘ください。)

比較関数です。(str元の文字列)と(str新しい文字列)のASCII値が等しい場合は0、(str元の文字列)が(str新しい文字列)より小さい場合は-1、(str元の文字列)が(str新しい文字列)より大きい場合は1が返る。

オブジェクトの例:文字列 str("abcd")

  • str.compare("abcd") - 0を返します。
  • str.compare("abce") - 1を返します。
  • str.compare("abcc") - 1を返します。
  • str.compare(0,2,str,2,2) - 使用します。 添え字0から始まる2文字をstrします。 str 添え字2からの2文字 比較 - つまり "ab" と "cd"" と比較し、結果は -1 を返します。
  • str.compare(1,2, "bcx",2) - との比較です。 添え字1から始まる2文字で構成されるstr の最初の2文字は、"bcx "です。 比較 - つまり、"bc" と "bc"" と比較して、0を返します。