あいうえお(5)かきく(8)けこ
という文字列の
”(数字)”を別の文字列”さささささ”
に変えたいんです。
(つまり、正解は
あいうえおさささささかきくさささささけこ)
replace関数を使ってみようと思ったのですが、
string型のものならば、
(開始場所、変えたい文字数、変えたい文字列)
を引数にすればいいのはわかるのですが、
これを、CStringでやりたいのです。
ヘルプを見てもCStringのreplace関数は
(変更前の文字列、変更後の文字列)を引数にする、
となっていて、私のように(数字)というアバウトな場合にはむかないのかとも思いますが、他のプログラムとの関係で、CString型がいいのです。
ややこしくてすいませんが、アドバイスお願いいたします。
No.2ベストアンサー
- 回答日時:
ごめんなさい。
No.1のコードはボロボロですね。(括弧外の数字まで削ったりとか…)なので改めて。でも、このやり方もいまいちな気がするな…
もっとスマートに処理したいと思ったら、正規表現ライブラリの利用になりますかね。
CString strSrc("あいうえお(5)かきく(8)けこ");
CString strNew("さささささ");
TRACE("%s\n", strSrc);
int nLeft = 0;
int nRigh = 0;
while ((nLeft = strSrc.Find('(', nLeft)) != -1) {
if ((nRight = strSrc.Find(')', nLeft + 1)) == -1) {
// 閉じ括弧無し
nLeft++;
continue;
}
// 括弧内の文字列を判定する
int nCount = nRight - nLeft - 1; // 括弧内の文字数
int nMatch = 0;
for (int i = nLeft + 1; i < nRight; i++) {
if ('0' <= strSrc[i] && strSrc[i] <= '9') {
nMatch++;
}
}
// 括弧内が全て数字だった場合置換する
if (nCount > 0 && nMatch == nCount) {
strSrc.Delete(nLeft, nCount + 2); // +2は括弧の分
strSrc.Insert(nLeft, strNew);
TRACE("%s\n", strSrc);
nLeft += strNew.GetLength();
} else {
nLeft++;
}
}
TRACE("%s\n", strSrc);
参考URL:http://www.s34.co.jp/cpptechdoc/article/regexpp/
細かい修正までありがとうございます!!
教えていただいたプログラムを参考に、
完成させることが出来ました。
C++の関数をちゃんと理解していないので、strchrとか使ったものになってしまいましたが・・・;
これから勉強して、よりC++らしいものが書けるようにしたいと思います☆
ありがとうございました!
No.1
- 回答日時:
とりあえず思いついたのは、「数字を削って括弧を置換する」という処理ですね。
数字や括弧に全角を使いそうな場合はもうちょい処理を増やす必要がありますが。
CStringstr("あいうえお(5)かきく(8)けこ");
TRACE("%s\n", str);
intnIndex;
while ((nIndex = str.FindOneOf("0123456789")) != -1) {
str.Delete(nIndex);
TRACE("%s\n", str);
}
str.Replace("()", "さささささ");
TRACE("%s\n", str);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
CString Format にて全角空白文字連続して格納する方法は?
C言語・C++・C#
-
6
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
7
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
8
C++でのCRLFについて
C言語・C++・C#
-
9
CString から LPCTSTRの型に変換
C言語・C++・C#
-
10
CStringについて
C言語・C++・C#
-
11
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
12
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
13
MFCのキャプション変更
C言語・C++・C#
-
14
エディットボックスの入力制限について
C言語・C++・C#
-
15
VC++でUTF-8のファイルを出力したい
C言語・C++・C#
-
16
charからLPTSTRへの変換方法
C言語・C++・C#
-
17
ダイアログのボタンが押された時に、その「ボタン」のあるダイアログと、すでに表示されている他のダイアログを消したいです
C言語・C++・C#
-
18
画面を強制的に再描画させる方法
C言語・C++・C#
-
19
CStringについて
C言語・C++・C#
-
20
絶対パスからのファイル名の切り離し
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の置換をCStringで(C++)
-
htmlspecialchars関数でエスケ...
-
近似した文字列を置換するエク...
-
PHP・Wordpress preg_replaceを...
-
ダブルコーテーション(
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
データベースから取り出したテ...
-
改行について
-
エクセルのCOUNTIFが正しくカウ...
-
ファイルから読み取った改行文...
-
VBScriptである文字列に半角文...
-
メッセージボックスで1025文字...
-
半角記号、全角記号を含む正規...
-
Excel関数「COUNTIF」で”文字”...
-
数値をASCII文字にする方法につ...
-
文字の入力で横バー上段、中断...
-
COBOLの改行
-
Excel2002 一桁数字だけ全角に置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSで"をエスケープする文字は?
-
ダブルコーテーション(
-
近似した文字列を置換するエク...
-
文字列の置換をCStringで(C++)
-
PHP・Wordpress preg_replaceを...
-
○分から○時間○分に変換
-
c# string型の変数に、ダブルク...
-
【PHP】preg_replace() で正...
-
(から)までの文字列を削除したい
-
nl2brが効かないのですが・・・
-
文字列の括弧について(初心者)
-
PHPでjavascriptを書き出すとき...
-
空白文字のカンマへの変換について
-
php 正規表現で、\\マークを取...
-
不規則なaタグのスクレイピング...
-
ダブルクォーテーションが置換...
-
マクロ関数 #define の効果は何...
-
文字列のアスタリスク置換
-
htmlspecialchars関数でエスケ...
-
文字列内にある「指定した空タ...
おすすめ情報