回答編集履歴

3

refine

2015/02/27 11:17

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 下記は2つの文字列を連結し、ある文字列と一致確認するコードの例です。下のほうが簡単です(よね)。
21
+ 下記は2つの文字列を連結し、別の文字列と一致確認するコードの例です。下のほうが簡単です(よね)。
22
22
 
23
23
  ```
24
24
 
@@ -48,7 +48,7 @@
48
48
 
49
49
  std::string s2 = "XYZ";
50
50
 
51
- s1 = s1 + s2; // s1s2を連結し"ABCXYZ"をs1に設定
51
+ s1 += s2; // s1の後ろs2を連結し"ABCXYZ"をs1に設定
52
52
 
53
53
  if (s1 == "ABCXYZ") {
54
54
 

2

コメント回答

2015/02/27 11:16

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -9,3 +9,55 @@
9
9
  特に理由がなければ、C++での文字列は`string`型を使ったほうがよいです。
10
10
 
11
11
 
12
+
13
+ ---
14
+
15
+
16
+
17
+ 追記:文字列を「`char`型の配列型」または「`string`型」で表現する場合、前者ではあらゆる操作が煩雑になり、メモリリークやバッファオーバーランのようなバグの温床になります。後者ならば文字列操作をわりと直感的に記述できます。
18
+
19
+
20
+
21
+ 下記は2つの文字列を連結し、ある文字列と一致確認するコードの例です。下のほうが簡単です(よね)。
22
+
23
+ ```
24
+
25
+ // char型の配列型バージョン
26
+
27
+ #include <string.h>
28
+
29
+ char s1[7] = "ABC"; // 6文字+終端文字1つ分を確保しておくこと!
30
+
31
+ char s2[] = "XYZ";
32
+
33
+ strcat(s1, s2); // s1とs2を連結した"ABCXYZ"をs1に設定
34
+
35
+ if (strcmp(s1, "ABCXYZ") == 0) {
36
+
37
+ // s1と"ABCXYZ"が一致することを確認
38
+
39
+ }
40
+
41
+
42
+
43
+ // string型バージョン
44
+
45
+ #include <string>
46
+
47
+ std::string s1 = "ABC";
48
+
49
+ std::string s2 = "XYZ";
50
+
51
+ s1 = s1 + s2; // s1とs2を連結した"ABCXYZ"をs1に設定
52
+
53
+ if (s1 == "ABCXYZ") {
54
+
55
+ // s1と"ABCXYZ"が一致することを確認
56
+
57
+ }
58
+
59
+ ```
60
+
61
+
62
+
63
+

1

char[]について追記

2015/02/27 08:02

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -1,5 +1,11 @@
1
- `char`型は「1文字」だけ格納できる、C++言語の基本型です。
1
+ `char`型は「1文字」だけ格納できる、C++言語の基本型です。文字"列"を格納するには「`char`型の配列型」を使う必要があります。(C++言語の祖先である)C言語で文字列を表すのは、この方法しかありませんでした。
2
2
 
3
3
 
4
4
 
5
5
  `string`型は「文字列=複数の文字からなる列」を格納する、C++ライブラリが提供する型です。`#include <string>`が必要ですし、正式名称は`std::string`と書かなければなりません。ただし`using namespace std;`としておけば、`string`のように使えます。
6
+
7
+
8
+
9
+ 特に理由がなければ、C++での文字列は`string`型を使ったほうがよいです。
10
+
11
+