c++のstringクラス
7137 ワード
このブログは『c++Primer Plus(第6版)中国語版』に基づいて書かれています.
c++のstringクラスは文字列の処理であり,c言語の文字列の処理よりずっと使いやすい.
stringによる文字列の処理は、文字列の類似の定量化処理である.すなわち,文字列を定数/定数として処理することができる.
まずstringを使用するには、ヘッダファイル#includeを含む必要があります.また、ネーミングスペースusing namespace stdも使用します.
基本操作:
1.構築string(構築文字列)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
コンストラクタ|説明
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char*s)|stringオブジェクトをs指向NBTSに初期化
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(size_type n,char c)|各オブジェクトが文字cに初期化されたn要素を含むstringオブジェクトを作成する
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string&str)|stringオブジェクトをstringオブジェクトstrに初期化(構造関数のコピー)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string()|デフォルトのstringオブジェクトを作成します.長さは0(デフォルトコンストラクタ)です.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char*s,size_type n)|stringオブジェクトをsが指すNBTSの最初のn文字に初期化し、NBTSの最後を超えても
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
template|stringオブジェクトを区間[begin,end)内の文字に初期化します.beginとendの動作はポインタのようです.
string(Iter begin,Iter end)|は、beginを含むがendを含まない特定の位置を指定するために使用されます.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string&str,string size_type pos=0,size_type n=npos)|stringオブジェクトをオブジェクトstrに初期化位置posから末尾まで
|の文字、または位置posから始まるn文字
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(string&&str)noexcept|これはc++11に追加され、stringオブジェクトをstringオブジェクトstrに初期化し、str(移動)を変更する可能性があります.
|コンストラクタ)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(initializer_list il|これはc++11に追加され、stringオブジェクトをリストilの文字に初期化します.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.文字列の入力:
(1.)C言語版への入力:
char s1[100];
入力方式は3種類ございます
a. cin>>s1; ワードは1つしか読めません.つまりスペースや‘’に遭遇して停止したのです
b. cin.getline(s1,100); ''停止に遭遇した場合は、スペースを入力できますが、''は含まれません.
c. cin.get(s1,100); 「停止」に遭遇しましたが、最後には「」が含まれています.
(2.) stringの入力:
string s2;
入力方式は2種類あります.
a. cin>>s2; ワードは1つしか読めません
b. getline(cin,s2); ストップにぶつかる
2つのバージョンのgetline()入力には、入力の境界を決定するためにその文字を使用するオプションのパラメータを入力する方法があります.
cin.getline(s1,100,'#'); 番号に出会ったらやめる
getline(s2,'#'); 同上
2つのバージョンの機能上の主な違いは、stringバージョンのgetline()ターゲットstringオブジェクトのサイズを自動的に調整して、入力した文字を格納できるようにします.簡単に言えば、string文字列の長さは入力した文字列の長さによって決まります.入力した文字列の長さは長さです.C言語版は固定された長さです.例えば、この例の長さです.度は100度です.ただしstringクラスの入力長は無制限ではなく、入力の最大制限はunsigned intの最大値です
stringは、サイズを直接比較することもできます.
s1 == s2; s1 > s2; s1 < s2;
stringクラスの場合、次の例を示します.
文字列のバブルソート(20分)
NNN個の整数を小さいものから大きいものに並べ替えるバブルソート法を知った.本題では,この方法を文字列シーケンスに用い,任意に与えられたKKK(入力形式:
入力は1行目にNNNとKKK(1≦K 1≦K出力フォーマット:
出力バブルソート法は、KKKパス目の中間結果シーケンスをスキャンし、各行に文字列を含む.
サンプルを入力:
出力サンプル:
patの上の問題:stringクラスでやれば、とても簡単です.
c++のstringクラスは文字列の処理であり,c言語の文字列の処理よりずっと使いやすい.
stringによる文字列の処理は、文字列の類似の定量化処理である.すなわち,文字列を定数/定数として処理することができる.
まずstringを使用するには、ヘッダファイル#includeを含む必要があります.また、ネーミングスペースusing namespace stdも使用します.
基本操作:
1.構築string(構築文字列)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
コンストラクタ|説明
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char*s)|stringオブジェクトをs指向NBTSに初期化
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(size_type n,char c)|各オブジェクトが文字cに初期化されたn要素を含むstringオブジェクトを作成する
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string&str)|stringオブジェクトをstringオブジェクトstrに初期化(構造関数のコピー)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string()|デフォルトのstringオブジェクトを作成します.長さは0(デフォルトコンストラクタ)です.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const char*s,size_type n)|stringオブジェクトをsが指すNBTSの最初のn文字に初期化し、NBTSの最後を超えても
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
template|stringオブジェクトを区間[begin,end)内の文字に初期化します.beginとendの動作はポインタのようです.
string(Iter begin,Iter end)|は、beginを含むがendを含まない特定の位置を指定するために使用されます.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(const string&str,string size_type pos=0,size_type n=npos)|stringオブジェクトをオブジェクトstrに初期化位置posから末尾まで
|の文字、または位置posから始まるn文字
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(string&&str)noexcept|これはc++11に追加され、stringオブジェクトをstringオブジェクトstrに初期化し、str(移動)を変更する可能性があります.
|コンストラクタ)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string(initializer_list il|これはc++11に追加され、stringオブジェクトをリストilの文字に初期化します.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include
#include
using namespace std;
int main()
{
string one("Lottery Winner!");
cout << one << endl;
// one , "Lottery Winner!"
string two(30,'$');
cout << two << endl;
// two , 30 $
string three(one);
cout << three << endl;
// string three string one
one += " Oops!";
cout << one << endl;
// one "Oops!"( “+=”)
two = "Sorry! That was ";
three[0] = 'p';
string four;
four = two + three;
cout << four << endl;
// "Sorry! That was " two, three 'p', two three four
char alls[] = "All's well that ends well";
string five(alls,20);
cout << five << "!
";
// alls 20 five
string six(alls + 6,alls + 10);
cout << six << ", ";
// alls 6 10 six
string seven(&five[6],&five[10]);
cout << seven << "...
";
// alls 6 10 seven
string eight(four,7,16); cout << eight << " in motion!" << endl;
// four 7 16 eight
return 0;
}
2.文字列の入力:
(1.)C言語版への入力:
char s1[100];
入力方式は3種類ございます
a. cin>>s1; ワードは1つしか読めません.つまりスペースや‘’に遭遇して停止したのです
b. cin.getline(s1,100); ''停止に遭遇した場合は、スペースを入力できますが、''は含まれません.
c. cin.get(s1,100); 「停止」に遭遇しましたが、最後には「」が含まれています.
(2.) stringの入力:
string s2;
入力方式は2種類あります.
a. cin>>s2; ワードは1つしか読めません
b. getline(cin,s2); ストップにぶつかる
2つのバージョンのgetline()入力には、入力の境界を決定するためにその文字を使用するオプションのパラメータを入力する方法があります.
cin.getline(s1,100,'#'); 番号に出会ったらやめる
getline(s2,'#'); 同上
2つのバージョンの機能上の主な違いは、stringバージョンのgetline()ターゲットstringオブジェクトのサイズを自動的に調整して、入力した文字を格納できるようにします.簡単に言えば、string文字列の長さは入力した文字列の長さによって決まります.入力した文字列の長さは長さです.C言語版は固定された長さです.例えば、この例の長さです.度は100度です.ただしstringクラスの入力長は無制限ではなく、入力の最大制限はunsigned intの最大値です
stringは、サイズを直接比較することもできます.
s1 == s2; s1 > s2; s1 < s2;
stringクラスの場合、次の例を示します.
文字列のバブルソート(20分)
NNN個の整数を小さいものから大きいものに並べ替えるバブルソート法を知った.本題では,この方法を文字列シーケンスに用い,任意に与えられたKKK(
入力は1行目にNNNとKKK(1≦K 1≦K
出力バブルソート法は、KKKパス目の中間結果シーケンスをスキャンし、各行に文字列を含む.
サンプルを入力:
6 2
best
cat
east
a
free
day
出力サンプル:
best
a
cat
day
east
free
patの上の問題:stringクラスでやれば、とても簡単です.
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char *argv[]) {
string s[101];
int n,k;
scanf("%d%d",&n,&k);
for(int i = 1; i <= n; ++i){
cin>>s[i];
}
for(int i = 1; i <= n; ++i){
if(k == 0) break;
k--;
for(int j = 1; j <= n-i; ++j){
string tmp;
if(s[j] > s[j+1]){
tmp = s[j];
s[j] = s[j+1];
s[j+1] = tmp;
}
}
}
for(int i = 1; i <= n; ++i){
cout<