C++学習手記一:ネーミングスペースと文字列

5545 ワード

名前空間using宣言
#include
using std::cin;
using std::cout;
using std::endl;
int main()
{
    cout << "Enter two numbers:" << endl;`

    int v1, v2;
    cin >> v1 >> v2;
    cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;

    return 0;
}

注意:ヘッダファイルにあるコードは、一般的にusing宣言を使用しないでください.ヘッダファイルの内容は、それを参照するすべてのファイルにコピーされます.
二標準ライブラリタイプstring
1定義と初期化
標準ライブラリタイプstringは可変長の文字シーケンスを表し、stringタイプを使用するにはまずstringヘッダファイルを含む必要があります:#include
#include 
#include 
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
    string s1;
    string s2 = s1;
    string s3 = "hello";
    string s4(10, 'c');

    cout << s3 << endl << s4 << endl;

    return 0;
}

ダイレクト初期化とコピー初期化
C++言語には、変数を等号(=)で初期化すると、コピー初期化が実行され、コンパイラは等号の右側の初期値を新しく作成したオブジェクトにコピーします.等号を使用しない場合は、直接初期化が実行されます.
string s3 = "hello";    //      
string s4(10, 'c');     //      ,s4   cccccccccc

2 stringオブジェクト操作
string操作
意味
getline(is, s)
isからsに割り当てられた行を読み出し、isを返します.
s.empty()
sは空でtrueを返し、そうでなければfalseを返します.
s.size()
sの文字数を返します
s[n]
sのn番目の文字の参照を返します.位置nは0から始まります.
s1 + s2
s 1とs 2の接続後の結果を返します
s1 = s2
s 1の元の文字の代わりにs 2のコピーを使う
s1 == s2, s1 != s2
s 1とs 2が等しいか等しくないかを判断し、大文字と小文字が敏感である.
, >=
ディクショナリ・シーケンスによる文字比較、大文字と小文字の機密性
読み書きstringオブジェクト
string s;
cin >> s;

stringオブジェクトは、先頭の空白(スペース、改行、タブなど)を自動的に無視し、次の空白に遭遇するまで最初の本当の文字から読み始めます.
未知数stringオブジェクトの読み込み
int main()
{
    string word;
    while (cin >> word)
        cout << word << endl;
    return 0;
}

whileはストリームが有効かどうかを検出し、ファイル終了フラグや不正入力に遭遇するとループが終了します.
getline行全体を読み込む
getline関数は、入力ストリームとstringオブジェクトのパラメータを持つ入力時の空白文字を保持します.getline関数は改行文字に遭遇すると読み取りを終了し、結果を返します.最初に改行文字を入力すると、空のstringになります.
int main()
{
    string line;
    while (getline(cin, line))
        cout << line << endl;
    return 0;
}

Emptyとsize操作
empty関数はstringオブジェクトが空であるかどうかに基づいてブール値を返します.size関数はstringオブジェクトの長さ(stringオブジェクトの文字の数)を返し、string::size_を返します.typeタイプの値.C++11では、コンパイラがautoまたはdecltypeを介して変数タイプを推定できるようにします:auto len = line.size();文字値とstringオブジェクトの加算
履歴上、C++言語の文字列フォント値は標準ライブラリタイプstringオブジェクトではありません.したがって、文字面値がstringに加算される場合、必要なタイプに自動的に変換できるように、各加算演算子(+)の両側の演算オブジェクトの少なくとも1つがstringであることを確認する必要があります.
3 stringオブジェクトの文字の処理
関数名
戻り値
isalnum(c)
パラメータがアルファベット、すなわちアルファベットまたは数値の場合、関数はtrueを返します.
isalpha(c)
パラメータがアルファベットの場合、関数はtrueを返します.
isblank(c)
パラメータがスペースまたは水平タブの場合、関数はtrueを返します.
iscntrl(c)
パラメータが制御文字の場合、関数はtrueを返します.
isdigit(c)
パラメータが数値(0~9)の場合、この関数はtrueを返します.
isgraph(c)
パラメータがスペース以外の印刷文字の場合、関数はtrueを返します.
islower(c)
パラメータが小文字の場合、関数はtrueを返します.
isprint(c)
パラメータが印刷文字(スペースを含む)の場合、関数はtrueを返します.
ispunct(c)
パラメータが句読点の場合、関数はtrueを返します.
isspace(c)
パラメータがスペース、給紙、改行、リターン、水平タブ、垂直タブなどの標準空白文字の場合、この関数はtrueを返します.
isupper(c)
パラメータが大文字の場合、関数はtrueを返します.
isxdigit(c)
パラメータが16進数、すなわち0~9、af、AFである場合、この関数はtrueを返す.
tolower(c)
パラメータが大文字の場合は、小文字を返します.そうでない場合は、パラメータを返します.
toupper(c)
パラメータが小文字の場合は、大文字を返します.そうでない場合は、パラメータを返します.
注意:C++バージョンのC標準ライブラリヘッダファイルをできるだけ使用します.C言語におけるヘッダファイルの形状はname.h,C++はこれらのファイルをcnameと命名する.すぐに取り除いた.h接尾辞、ファイル名nameの前にアルファベットcを追加します.cnameという名前のヘッダファイルで定義名前は、ネーミング空間stdに属する名前から、名前に定義される.hのヘッダファイルはそうではありません.
範囲ベースfor文
for (declaration: expression)
    statement

例:
int main()
{
    string str("some string");
    for (auto c : str)
        cout << c << endl;
    return 0;
}

エピソード:私が使っているIDEはcodeblock 13.12で、最初はコンパイルでC++11はサポートされていませんでしたが、次の設定が必要です:Settings->Compiler->Compiler Settings->Have g++follow the C++11 ISO C++language standard
統計stringオブジェクトの句読点の数:
int main()
{
    string line;
    getline(cin, line);
    a
    decltype(line.size()) punct_cnt = 0;

    for (auto c : line)
        if (ispunct(c))
            ++punct_cnt;

    cout << punct_cnt << endl;
    return 0;
}

文字列を大文字に変換するには、次の手順に従います.
int main()
{
    string line;
    getline(cin, line);

    for (auto &c : line)
        c = toupper(c);

    cout << line << endl;
    return 0;
}

下付き文字を使用した反復
lineの最初の単語を大文字に変更します.
int main()
{
    string line;
    getline(cin, line);

    for (decltype (line.size()) index = 0; index != line.size() && !isspace(line[index]); ++index)
        line[index] = toupper(line[index]);

    cout << line << endl;
    return 0;
}

10進数から16進数へ:
int main()
{
    const string hexdigits = "0123456789ABCDEFG";
    string result;
    decltype(hexdigits.size()) n;
    while(cin >> n)
        if(n < hexdigits.size())
            result += hexdigits[n];

    cout << result << endl;
    return 0;
}

文字列の句読点を削除するには、次の手順に従います.
int main()
{
    string line;
    getline(cin, line);
    for(auto &c: line)
        if(!ispunct(c))
            cout << c;

    return 0;
}