回答編集履歴

4

追記

2018/03/01 08:35

投稿

can110
can110

スコア38266

test CHANGED
@@ -73,3 +73,61 @@
73
73
  }
74
74
 
75
75
  ```
76
+
77
+
78
+
79
+ 上の回答だとアレなので`episteme`さんの回答を~~パクリ~~参考に平易に書いてみました。
80
+
81
+ ```C++
82
+
83
+ #include <iostream>
84
+
85
+ #include <map>
86
+
87
+ int main() {
88
+
89
+ std::string src("abcabcde");
90
+
91
+ std::string repFrom("ac"), repTo("12"); // a->1, c->2
92
+
93
+
94
+
95
+ // 置換マップ作成
96
+
97
+ std::map<char,char> mRep;
98
+
99
+ for( int i = 0; i < repFrom.length(); i++){
100
+
101
+ mRep[repFrom[i]] = repTo[i];
102
+
103
+ }
104
+
105
+
106
+
107
+ // 置換
108
+
109
+ std::string dst;
110
+
111
+ for( int i = 0; i < src.length(); i++){
112
+
113
+ char c(src[i]);
114
+
115
+ auto it = mRep.find(c);
116
+
117
+ if (it != mRep.end() ) {
118
+
119
+ c = it->second;
120
+
121
+ }
122
+
123
+ dst += c;
124
+
125
+ }
126
+
127
+ std::cout << dst << std::endl; // 1b21b2de
128
+
129
+ return 0;
130
+
131
+ }
132
+
133
+ ```

3

修正

2018/03/01 08:35

投稿

can110
can110

スコア38266

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  なお、以下コードでは複数個の文字を置換していますが、英字→数字など、置換元先の文字がかぶらない前提です。
48
48
 
49
- 複数個の任意の文字について置換する場合は、処理を見直す必要があります。
49
+ 複数個の任意の文字について置換する場合は、処理を見直す(一度置換した文字は再置換しないようにする)必要があります。
50
50
 
51
51
  ```C++
52
52
 

2

追記

2018/03/01 05:08

投稿

can110
can110

スコア38266

test CHANGED
@@ -44,6 +44,10 @@
44
44
 
45
45
  追記を受けて。`std::replace`を使えば楽ですね。
46
46
 
47
+ なお、以下コードでは複数個の文字を置換していますが、英字→数字など、置換元先の文字がかぶらない前提です。
48
+
49
+ 複数個の任意の文字について置換する場合は、処理を見直す必要があります。
50
+
47
51
  ```C++
48
52
 
49
53
  #include <iostream>

1

追記

2018/03/01 05:03

投稿

can110
can110

スコア38266

test CHANGED
@@ -39,3 +39,33 @@
39
39
  }
40
40
 
41
41
  ```
42
+
43
+
44
+
45
+ 追記を受けて。`std::replace`を使えば楽ですね。
46
+
47
+ ```C++
48
+
49
+ #include <iostream>
50
+
51
+ #include <algorithm>
52
+
53
+ int main() {
54
+
55
+ std::string s = "abcabcde";
56
+
57
+ std::string rep("ac"), num("12"); // a->1, c->2
58
+
59
+ for( int i = 0; i < rep.length(); i++){
60
+
61
+ std::replace(s.begin(), s.end(), rep[i], num[i]);
62
+
63
+ }
64
+
65
+ std::cout << s << std::endl; // 1b21b2de
66
+
67
+ return 0;
68
+
69
+ }
70
+
71
+ ```