visual studio 2015 C++で以下の関数を作成しました。
wstring Replace(wstring String1, wstring String2, wstring String3)
{
wstring::size_type Pos(String1.find(String2));
while (Pos != std::string::npos) { String1.replace(Pos, String2.size(), String3); Pos = String1.find(String2, Pos + String3.size()); } return String1;
}
この関数の
String1.replace(Pos, String2.size(), String3);
の一文が上手く動作してくれません。
デバッガで確認すると、この一文の実行前は、
String1 = L" 見積ID
int(11) DEFAULT NULL,\n"
String2 = L"見積ID
"
String3 = L"estimateID
"
となっているのですが、この一文を実行すると、
String1 = L" estimateID
"
となってしまいます。
どこが、おかしいのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
質問内容に書いてない部分で問題がありそうですね。
ほかにReplace関数があったりしませんか?
呼び出し側のコードも含めて書いてみてください。
その際に、’’’で囲むと変に文字が消えたりしないと思います。
C4717は再起のエラーですね。
wstring String4 = Replace(String1, String2, String3);の部分をReplaceの中に書いているとか。
Visual Studio Community 2015で問題なく置換されるので、コンパイラは気にしなくて大丈夫です。
C++
1#include <string> 2using namespace std; 3 4wstring Replace(wstring String1, wstring String2, wstring String3) 5{ 6 wstring::size_type Pos(String1.find(String2)); 7 8 while (Pos != string::npos) 9 { 10 String1.replace(Pos, String2.size(), String3); 11 Pos = String1.find(String2, Pos + String3.size()); 12 } 13 14 return String1; 15} 16 17 18int main() 19{ 20 wstring String1 = L" '見積ID' int(11) DEFAULT NULL,\n"; 21 wstring String2 = L"'見積ID'"; 22 wstring String3 = L"'estimateID'"; 23 wstring String4 = Replace(String1, String2, String3); 24 25 return 0; 26}
投稿2016/06/28 04:50
総合スコア487
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
ベストアンサー
こんにちは。
MSVC 2015 update 2にてやってみましたが、手元では正常に動作しました。
C++
1wstring String1 = L" 見積ID int(11) DEFAULT NULL,\n"; 2wstring String2 = L"見積ID"; 3wstring String3 = L"estimateID"; 4wstring String4 = Replace(String1, String2, String3);
デバッガで止めて、String4を確認したら、L" estimateID int(11) DEFAULT NULL,\n"
となってます。
String1 = L" estimateID"
となってしまいます。
String2が実はL"見積ID\0"
のようになってないでしょうか?
【追記】
私が動作検証したソースです。
C++
1#include <iostream> 2#include <string> 3 4using namespace std; 5 6wstring Replace(wstring String1, wstring String2, wstring String3) 7{ 8 wstring::size_type Pos(String1.find(String2)); 9 10 while (Pos != std::string::npos) 11 { 12 String1.replace(Pos, String2.size(), String3); 13 Pos = String1.find(String2, Pos + String3.size()); 14 } 15 16 return String1; 17} 18 19int main(int argc, char* argv[]) 20{ 21 wstring String1 = L" `見積ID` int(11) DEFAULT NULL,\n"; 22 wstring String2 = L"`見積ID`"; 23 wstring String3 = L"`estimateID`"; 24 wstring String4 = Replace(String1, String2, String3); 25 26 wcout << String4 << endl; 27 28 return 0; 29}
投稿2016/06/27 09:02
編集2016/06/28 10:18総合スコア23274
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。