回答編集履歴
2
追記
test
CHANGED
@@ -101,3 +101,59 @@
|
|
101
101
|
予想予 -> 予想予
|
102
102
|
|
103
103
|
```
|
104
|
+
|
105
|
+
**追記**
|
106
|
+
|
107
|
+
マルチバイト文字が UTF-8 ではなく、Shift-JIS だと分かっていたとすれば、
|
108
|
+
|
109
|
+
```C++
|
110
|
+
|
111
|
+
#include <iostream>
|
112
|
+
|
113
|
+
#include <string>
|
114
|
+
|
115
|
+
#include <sstream> // ostringstream
|
116
|
+
|
117
|
+
using namespace std;
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
bool isleading(unsigned char c) { return (c ^ 0x20) - 0xa1 < 60u; }
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
string bs2(const string& s)
|
126
|
+
|
127
|
+
{
|
128
|
+
|
129
|
+
ostringstream oss;
|
130
|
+
|
131
|
+
for (const char *p = s.c_str(); *p; p++) {
|
132
|
+
|
133
|
+
oss << *p;
|
134
|
+
|
135
|
+
if (*p == '\') oss << '\';
|
136
|
+
|
137
|
+
else if (isleading(*p)) oss << *++p;
|
138
|
+
|
139
|
+
}
|
140
|
+
|
141
|
+
return oss.str();
|
142
|
+
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
int main()
|
148
|
+
|
149
|
+
{
|
150
|
+
|
151
|
+
string a[] = { "あい\うえお\かきくけこ", "表層", "予想予" };
|
152
|
+
|
153
|
+
for (string& s : a)
|
154
|
+
|
155
|
+
cout << s << " -> " << bs2(s) << endl;
|
156
|
+
|
157
|
+
}
|
158
|
+
|
159
|
+
```
|
1
実行結果の修正
test
CHANGED
@@ -94,10 +94,10 @@
|
|
94
94
|
|
95
95
|
```text
|
96
96
|
|
97
|
+
あい\うえお\かきくけこ -> あい\うえお\かきくけこ
|
98
|
+
|
97
99
|
表層 -> 表層
|
98
100
|
|
99
101
|
予想予 -> 予想予
|
100
102
|
|
101
|
-
あい\うえお\かきくけこ -> あい\うえお\かきくけこ
|
102
|
-
|
103
103
|
```
|