• ベストアンサー

VC++で文字列から任意の文字を削除するにはどうしたらいいですか?

VC++で文字列から任意の文字を削除するにはどうしたらいいですか? タイトルのとおりです。 VC++にてあるソフトのプロファイルを作成したいのですが、 [Profile] Type = Default となっており、Defaultという部分だけとりたいのです。 ちなみにDefault以外にもGuestやAdminなどもありますので、Type = まで取り出したいのです。 どうしたらいいんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

何がしたいかいまいちわかりませんが、 とりあえず文字列をCStringに一回入れてください。 右側を消したいならTrimRight 特定文字列まで取得したい場合は、FindとLeftとかで。 #include "afx.h" #include <iostream> int main() { CString str;// ここに文字列を入れる CString dst; dst = str = "type = default"; std::cout << str; // 右側を削除 dst.TrimRight("default"); std::cout << dst << std::endl; dst = str; // =までを取得 dst = dst.Left(dst.Find('=')+1); std::cout << dst << std::endl; return 0; }

aduken
質問者

お礼

コードありがとうございます。 少し質問の意味がわかりづらかったですね・・・ まずは、複数行ある文字列から、 一行だけ取り出したいのです。 ちなみに使用言語は C++/CLI です。 String::Trim を使ってみましたが、よくわかりませんでした。

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

GetPrivateProfileString/WritePrivateProfileStringを使えば一発なのですが、 C++/CLI で使えるかどうかは不明です。

回答No.2

こんな感じかな? (ファイルがシフトJISの場合) "Default"で探すと他の設定値が入ってる場合はまた作り直さないといけないから、重複がないと仮定して[Profile]の次の行の"Type = "を探してる。 using namespace System; using namespace System::IO; using namespace System::Text; void ProfileTypeEmpty(String^ filename) { array<String^>^ lines = File::ReadAllLines (filename, Encoding::GetEncoding("shift_jis")); bool next_flag = false; int i; String^ str1 = "[Profile]"; String^ str2 = "Type = "; for (i = 0; i < lines->Length; i++) { if (lines[i] == str1) { next_flag = true; } else if (next_flag) { next_flag = false; if (String::Compare(lines[i], 0, str2, 0, str2->Length) == 0) { // lines[i] = str2 + "Guest"; // Guestを設定する場合 lines[i] = str2; // 何も付けない場合 break; } } } File::WriteAllLines (filename, lines, Encoding::GetEncoding("shift_jis")); }

関連するQ&A