teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記

2018/03/01 08:35

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -35,4 +35,33 @@
35
35
  std::cout << s << std::endl; // 1b21b2de
36
36
  return 0;
37
37
  }
38
+ ```
39
+
40
+ 上の回答だとアレなので`episteme`さんの回答を~~パクリ~~参考に平易に書いてみました。
41
+ ```C++
42
+ #include <iostream>
43
+ #include <map>
44
+ int main() {
45
+ std::string src("abcabcde");
46
+ std::string repFrom("ac"), repTo("12"); // a->1, c->2
47
+
48
+ // 置換マップ作成
49
+ std::map<char,char> mRep;
50
+ for( int i = 0; i < repFrom.length(); i++){
51
+ mRep[repFrom[i]] = repTo[i];
52
+ }
53
+
54
+ // 置換
55
+ std::string dst;
56
+ for( int i = 0; i < src.length(); i++){
57
+ char c(src[i]);
58
+ auto it = mRep.find(c);
59
+ if (it != mRep.end() ) {
60
+ c = it->second;
61
+ }
62
+ dst += c;
63
+ }
64
+ std::cout << dst << std::endl; // 1b21b2de
65
+ return 0;
66
+ }
38
67
  ```

3

修正

2018/03/01 08:35

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  追記を受けて。`std::replace`を使えば楽ですね。
24
24
  なお、以下コードでは複数個の文字を置換していますが、英字→数字など、置換元先の文字がかぶらない前提です。
25
- 複数個の任意の文字について置換する場合は、処理を見直す必要があります。
25
+ 複数個の任意の文字について置換する場合は、処理を見直す(一度置換した文字は再置換しないようにする)必要があります。
26
26
  ```C++
27
27
  #include <iostream>
28
28
  #include <algorithm>

2

追記

2018/03/01 05:08

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -21,6 +21,8 @@
21
21
  ```
22
22
 
23
23
  追記を受けて。`std::replace`を使えば楽ですね。
24
+ なお、以下コードでは複数個の文字を置換していますが、英字→数字など、置換元先の文字がかぶらない前提です。
25
+ 複数個の任意の文字について置換する場合は、処理を見直す必要があります。
24
26
  ```C++
25
27
  #include <iostream>
26
28
  #include <algorithm>

1

追記

2018/03/01 05:03

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -18,4 +18,19 @@
18
18
  }
19
19
  return 0;
20
20
  }
21
+ ```
22
+
23
+ 追記を受けて。`std::replace`を使えば楽ですね。
24
+ ```C++
25
+ #include <iostream>
26
+ #include <algorithm>
27
+ int main() {
28
+ std::string s = "abcabcde";
29
+ std::string rep("ac"), num("12"); // a->1, c->2
30
+ for( int i = 0; i < rep.length(); i++){
31
+ std::replace(s.begin(), s.end(), rep[i], num[i]);
32
+ }
33
+ std::cout << s << std::endl; // 1b21b2de
34
+ return 0;
35
+ }
21
36
  ```