string クラスについて一通り。 古い C++ のテキストでは文字列クラスを作ってみせるのが 定番という雰囲気もあったが (それどころか C 風の文字列の説明を 一所懸命している本もまだ珍しくはない)、 標準 C++ ライブラリィに含まれるようになったので、 もうその利用方法を学ぶ時期でしょう。
string1.C |
#ifdef __FreeBSD__ #include <iostream.h> #else #include <iostream> #endif #include <string> using namespace std; void add_newline(string &s) { s += '\n'; } int main() { // string に文字列リテラルを代入できる string s1 = "Hello"; string s2 = "world"; // string は + 演算子で、string, 文字列リテラル, 文字を結合できる string s3 = s1 + ", " + s2 + '!'; add_newline(s3); cout << s3; // string 同士、string と文字列リテラルは == で比較できる if (s3 == "Hello, world!\n") cout << "Equal" << endl; // C 形式の文字列は c_str() メンバ関数で得られる。 cout.form("%s\n", s1.c_str()); // 一行丸々入力するには getline() string line_input; cout << "input a line" << endl; getline(cin, line_input); cout << "入力された行は" << line_input << endl; } |
string1.out |
mathpc00% ./test-string1 Hello, world! Equal Hello input a line To be to be, ten made tobe! 入力された行はTo be to be, ten made tobe! mathpc00% |
test-string1.C |
#include <iostream.h> #include <string> int main() { string s1 = "aa"; string s2("bb"); string s3; s3 = s1 + s2; cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; for (int i = 0; i < 5; i++) s3 += s3; cout << s3 << endl; for (size_t i = 0; i < s3.length(); i++) cout << s3[i]; cout << endl; // 部分文字列について s3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; cout << '"' << s3 << '"' << "という文字列について" << endl; string first10(s3, 0, 9); string cut_first10(s3, 10); cout << "最初の10文字" << first10 << endl; cout << "最初の10文字をカット" << cut_first10 << endl; return 0; } |