- ベストアンサー
文字列を分解したいのですが・・・
VC++初心者です。 ある文字列(数値、数値、数値CRLF数値、数値・・・)のような中からコンマで区切られた数字を取り出したいのですがうまくいきません。 とりあえずはコンマと改行コードの位置だけでも探したいのですがどうやったら良いでしょうか?お知恵を貸してください。 char buffer[64] = 10.52,5.88,4.37(改行コード)6.42,41.91; char* result; int ch1 = "CRLF"; result = strchr(buffer,ch1); int ch2 = "," result = strchr(buffer,ch2); 改行コードは最初の文字列に入ってるはずですが見えないので(改行コード)と入力しました。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1. > int ch1 = "CRLF"; この行はどういう意味だい? C言語でCR/LFを表現するには、"\r\n"としなければならない。 2. strchr関数は、文字列中から「文字」を検索する関数だ。"\r\n"のように、2文字からなる「文字列」を検索する場合は、変わりにstrstr関数を使用する。 char *strstr(char *str1, char *str2) ch2の方は「,」1文字なので「","」ではなく「','」としてstrchrでも良いが、どうせなのでstrstrで統一した方がソースの見通しが良いだろう。 具体的にはこんな感じ。 char buffer[64] = "10.52,5.88,4.37\r\n6.42.41.91"; char *ch1 = "\r\n"; result = strstr(buffer, ch1); char *ch2 = ","; result = strstr(buffer, ch2);
その他の回答 (2)
- chie65536
- ベストアンサー率41% (2512/6032)
以下の2行は誤りです。ワーニングかエラーになる筈ですが。 int ch1 = "CRLF"; int ch2 = ","; この2行は「charのポインタをintにキャストして代入」しています(ポインタが指すアドレスをint型とみなして代入している) int ch1 = '\n'; int ch2 = ','; が正しいです(ダブルクォーテーションではなくシングルクォーテーションで括っているのに注意) なお、テキストモードでオープンしたストリームからfread関数等で読み込んでbufferにセットしている場合、改行文字は「\n」1文字になるので注意して下さい。 ファイルの中のCR+LF(\r+\n)は、バッファに読んだ時点でLF(\n)のみの1文字になります。
お礼
ん? "\r\n"か'\n'かは両方試してみます。 ありがとうございます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
文字列じゃなくて、数値として取り出すなら #include <stdio.h> void main(void){ char buffer[64] = "10.52,5.88,4.37\n6.42,41.91"; double num[5]; int i; sscanf(buffer,"%lf,%lf,%lf\n%lf,%lf",&num[0],&num[1],&num[2],&num[3],&num[4]); for(i=0;i<5;i++) printf("%f\n",num[i]); } のようにすればいいです。 まあ、C++的ではないけども。
お礼
ぉおお! こんなやり方もあるのですか。 ありがとうございます。
お礼
めちゃめちゃありがとうございます。 改行を"\r\n"とあらわすことと strstrという関数があること 勉強になります。