No.3ベストアンサー
- 回答日時:
最後の1文字を削除したいということでしょうか?
m_InputData.Delete(m_InputData.GetLength() - 1);
# 最後の1文字が漢字とかだとまずいですが。
参考URL:http://www.microsoft.com/JAPAN/developer/library …
回答ありがとうございます。
正確には最後から2文字以降を削除したいのですが、参考サイトを見てもすぐには理解できませんでした。
教えていただけると大変助かります。
どうかお願い致します。
No.8
- 回答日時:
やりたいことはともかくとしてCStringを使っているのにメンバ関数を活かしてないような気がしますが。
CStringは文字列を扱うのに非常に便利ですからいくつか関数を覚えて使うようにすると良いと思います。特定文字を置き換えるならこの場合はGetLength()で-2でも良いのかもしれませんが、Find()かReverseFind()あるいはFindOneOf()で見つけてSetAt()で置き換えるとか。
見つけた部分から前だけを抽出するならFind()で取ったnCountを使ってLeft()で抽出、=で代入するとか。
文字数を削るなら\0代入でなく、Mid()で割って=で代入するとか。
ホワイトスペース(空白、改行、タブ)を取り除くならTrimRight()を使うとか。
No.7
- 回答日時:
要はLFをCRLFに変換したいということですよね
変換は出来たみたいですが、一つ確認していただきたい
その読み込んでいるファイルの改行コードはLFなのですか?
Windows環境で使われるテキストファイルはCRLFが標準です。
しかしCでは伝統的に改行コードはLFなので、
WindowsのCにはCRLFをLFに変換して読み込む
「テキストモード」というのがあります。
テキストモードで読み込んでいませんか?
もしそうなら、何も変換せずに読み込む
「バイナリモード」でファイルをオープンすれば
うまくいくのではないでしょうか
fopenなら"r"ではなく"rb"を指定
CFileならCFile::typeBinaryを指定すればいいのかな?
(MFCはよく知らない)
No.6
- 回答日時:
mydata1[n-1]='\0'; はfgets()の末尾の'\n'をカットするものですよね。
(厳密には'\n'かどうかの検査をすべきと思います)
http://www.bohyoh.com/CandCPP/C/Library/fgets.html
>空の1行を削除するために今回の処理をしています
取得した文字列に改行コードを付加しているので、最後は改行で終わりますね。
これでいかがでしょうか?
for(i=0;;i++){
fgets(mydata1,256,fin);
n=strlen(mydata1);
if(mydata1[n-1]=='\n')
mydata1[n-1]='\0';
if(strcmp(mydata1,"end")){
if(i==0)
m_InputData=mydata1;
else
m_InputData=m_InputData+crlf+mydata1;
}
略
}
参考URL:http://www.bohyoh.com/CandCPP/C/Library/fgets.html
この回答への補足
回答ありがとうございます。
教えて頂いたコードは理解できました。
しかしながら、実際にはテキストファイルに書き込むときに特殊な処理をしているため、教えていただいたコードではエディットボックスに表示するとゴミが付きます。
あああ
いいい・・ ←ゴミの数は適当
それで結局 moji[n-2]='\0' というおかしな処理が必要になりました。
MovingWalkさんのコードの考え方は、今後の参考にさせて頂きたいと思います。
また、最初の質問に戻って、今回知りたかったCStringでの処理の仕方については、yoppiiさんに教えて頂いたことで解決です。
今回の質問はこれで解決、終了にさせて頂きたいと思います。
#今回の質問の内容より前に行っているテキストファイルに書き込む処理を私自身が正確に理解出来ていない為、適確な質問が出来ず申し訳ありませんでした。
自分自身で調べて分からなければ、改めて質問します。
ちなみに、テキストファイルに書き込む時に以下のような感じで処理しています。
aaaa=aaaa+bb+"\x0a"+aaa+"\x0d\x0a"+"end"+crlf;
回答ありがとうございます。
今日は疲れているのでもう寝ます。
(朝型タイプなのですみません)
教えていただいたことは明日また確認して連絡させていただきます。
一応、CStingでのコードは#5の補足に書いた方法でうまく行きました。
結果がうまくいっただけで、細かい分かっていない部分は勉強したいと思います。
No.5
- 回答日時:
#3 のコードで「サンプルプログラムと同じ処理」
が出来るのですが。だめですか?
> 正確には最後から2文字以降を削除したいのですが、
もう一度やりたいことを確認したいのですが,
"ABCDE" が "ABC" になればいいのでしょうか?
日本語の扱いはどうしましょうか?
考慮しなくてもいいですか?
それとも,
"あいうえお" が "あいう" になって欲しいですか?
この回答への補足
参考サイトを調べてようやく出来ました。
m_InputData.Insert(m_InputData.GetLength() - 2, '\0');で同じことが実現でき、実行結果もうまくいきました。
回答ありがとうございます。
適確に疑問点を質問できず、気を使わせて申し訳ありません。
#4のお礼欄にもう少し詳しく質問内容を書いておきました。
これでお分かりでしたら、よろしくお願い致します。
No.4
- 回答日時:
>サンプルプログラムと同じことが出来れば良いです
何のためにサンプルプログラムのようなことが必要なのかをお聞きして
いるんです。サンプルプログラムのままがよければそれでいいはずです。
moji[n-1]='\0'
C文字列の最後の文字を消すってことですよね。
こうすれば、
「CString型の文字の最後の1文字を’¥0’に変更する」
ことになるんですか?(文字サイズが小さくなることとは意味が少し違います)
この回答への補足
すみません。1部訂正です。
<誤り>
あああ
いいい・
<訂正>
あああ
いいい
←空の1行が入る
| ←カーソルの位置
空の1行を削除するために今回の処理をしています。
回答ありがとうございます。
>何のためにサンプルプログラムのようなことが必要なのかをお聞きしているんです。
うまく説明できませんがご容赦ください。
<仕様>
1.テキストファイルから1行づつ読み込む。
2.読み込んだ文字列をエディットボックスに改行して表示できるように、1行読み込む毎に"\x0a"を追加しました。
while(1){
fgets(mydata1,256,fin);
n=strlen(mydata1);
mydata1[n-1]='\0';
if(strcmp(mydata1,"end")){
m_InputData=m_InputData+mydata1+crlf;
}
略
3.実行してみると、最終行にだけゴミ・が付きました。
あああ
いいい・
4.そのゴミを取るために、次のようにしました。
CString m_InputData;
char moji[100];
int n;
strcpy(moji,m_InputData);
n=strlen(moji);
moji[n-2]='\0' //■n-2です
m_InputData=moji;
>サンプルプログラムのままがよければそれでいいはずです。
もう少しスマートな書き方があるんじゃないかと思いお聞きしました。
これでお分かりでしょうか?
よろしくお願い致します。
No.2
- 回答日時:
回答ありがとうございます。
>結局何をしようとしているのかわかりませんが、
質問が仕方がまずいようですが、勘弁ください。
サンプルプログラムと同じことが出来れば良いです。
よろしくいお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
VC++で文字列から任意の文字を削除するにはどうしたらいいですか?
C言語・C++・C#
-
文字列の置換をCStringで(C++)
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
CString から LPCTSTRの型に変換
C言語・C++・C#
-
6
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
7
CString型の文字列連結について
C言語・C++・C#
-
8
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
9
CArrayの要素としてCStringArrayを使うことは...
C言語・C++・C#
-
10
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
11
画面を強制的に再描画させる方法
C言語・C++・C#
-
12
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
13
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
fgets関数を使用したときの文字...
-
教えて下さい 文字数最大制限2...
-
getchar分を用いて入力された文...
-
C言語で右シングルクオートがう...
-
C言語 空白の行(改行のみ)が...
-
fgetsとsscanfを使って一行から...
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
スペースで区切って数字を入力
-
sscanfとscanfの違いがよくわか...
-
プログラミング 文字入力のエラ...
-
全角文字のチェック
-
小文字のみを数える方法
-
str[j++]の意味
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
ある商品のロス率を5%見込み、...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
fgets関数を使用したときの文字...
-
charと%c , %s の関係について
-
Cで「大文字、小文字の判定」は...
-
itoaわかりません
-
C言語のステップ数をカウントす...
-
文の意味
-
C言語で16進数文字列から16進数...
-
単語数のカウントについて
-
反転した数値を表示させるやり方
-
C言語 空白の行(改行のみ)が...
-
strstrを利用しない文字列検索...
-
fgetsで拾われる改行文字を削除...
-
C言語の課題です
-
[Java]文字列分割
-
教えていただけませんか?C言語...
-
ある文字列で2回目3回目に出現...
-
文字列の途中に「0」がある場...
-
初歩的なプログラムなんですが...
おすすめ情報