- ベストアンサー
数字の入った文字列
例えば、テキストファイルに以下のような文字列があるとき inoki11 inoki12 inoki13 inoki14 ogawa11 ogawa12 ogawa13 「sscanf」を用いて一行ずつよんで inoki11 inoki12 だけとりだしたテキストファイルを新たにつくりたいのですが、 そのとき、文字の部分と数字の部分を分けて考える必要があると 思うのです。 そこで、文字の部分は、文字列、数字の部分は数列と読み込みたいのですが それは可能でしょうか? 「strcmp」だとすべて文字列として読み込んでしまいますよね。 「strncmp」をうまく使えばできそうなのですが、 よく分かりません。 何かいい方法があれば教えてください。 お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ファイルを振り分ける条件として、定型文字列+数字の組み合わせで、定型文字列の部分がおなじものをグループとしてファイルを分けるという命題であるとします。 ならば、文字部分と数字部分を分ける必要がありますね。 ざっくり省略しますが、 char readbuf[80], buf[80], pbuf, p; scanf ("%s", readbuf); p = readbuf; pbuf = buf; while (!isnumeric(*p)) *pbuf++ = *p++; のように定型文字列部分を取り出して、次の行を strncmp (buf, readbuf, strlen(buf)) で比較できます。
その他の回答 (4)
- nagare
- ベストアンサー率33% (280/831)
ごめんなさい 文字と数字を分けたいのですね 文字列長が固定という条件であれば、構造体を使うという方法があります
- nagare
- ベストアンサー率33% (280/831)
>そのとき、文字の部分と数字の部分を分けて考える必要があると思うのです。 必要はありません 'inoki11'の'1'はコードで言えば0x31であって0x01ではありません 'inoki11'をそのまま読み込み、print文で出力してください そのまま表示されます
- bug_master
- ベストアンサー率52% (10/19)
数字部分を操作しないなら文字列を数字部分とそれ以外に分けなくても良いと思いますが、分けたいなら、 char str[] = "inoki11"; char alpha[BUFFER_SIZE]; int num; として、 sscanf(str, "%[^0123456789]%d", alpha, &num); とすれば、 alpha が "inoki"、 num が 11 となります。
- crimson
- ベストアンサー率40% (900/2202)
C/C++には慣れてないので、一般論として。 (1) 数字部分の桁数を完全に統一。 #つまり、「1」であっても「001」「0001」、 #「20」であっても「020」「0020」のように。 (2) 文字列を「右から○文字」と「それ以外」に分離。 (3) 「右から○文字」の部分を数値に変換。 …という方法でどうでしょうか?