プロが教える店舗&オフィスのセキュリティ対策術

VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
タイトルのとおりです。
VC++にてあるソフトのプロファイルを作成したいのですが、

[Profile]
Type = Default

となっており、Defaultという部分だけとりたいのです。
ちなみにDefault以外にもGuestやAdminなどもありますので、Type = まで取り出したいのです。

どうしたらいいんでしょうか?
よろしくお願いします。

A 回答 (3件)

何がしたいかいまいちわかりませんが、


とりあえず文字列を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;
}
    • good
    • 0
この回答へのお礼

コードありがとうございます。
少し質問の意味がわかりづらかったですね・・・
まずは、複数行ある文字列から、
一行だけ取り出したいのです。

ちなみに使用言語は
C++/CLI です。

String::Trim を使ってみましたが、よくわかりませんでした。

お礼日時:2010/10/03 01:39

GetPrivateProfileString/WritePrivateProfileStringを使えば一発なのですが、


C++/CLI で使えるかどうかは不明です。
    • good
    • 0

こんな感じかな?


(ファイルがシフト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"));
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A