- ベストアンサー
C言語でのプログラムの最後の桁を消去する方法は?
- C言語で表された数値の各列の最後の桁を消去するプログラムを作りたいです。
- スペースが数値の間にあるため、ヌルコードの手前の数値を消去するか、桁数を指定して最後の桁を消去するか迷っています。
- どの関数を使用すればプログラムの最後の桁を消去できるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
データの間にスペースがあるので、このデータがファイルにあると仮定します。 1.1行読み込む(fgets) 2.スペース区切りでデータを区切る(strtok) 3.区切った文字列("23481\0")の最後にNULLをセット buff[strlen(buff)-1] = NULL; 4.2へNULLまで繰り返す。 5.1行別ファイルに書き出す。 6.1へEOFまで繰り返す。 簡単なロジックかいてみました。 コンパイルもしてませんので、動くかどうかわかりません。 また、エラー回避も入れてません。 試して検証して、改造してご利用ください。 FILE *fpw, *fpr; char buff[1025]; char bf[6]; fpr = fopen("read.txt", "r"); fpw = fopen("write.txt", "w"); while(fgets(buff, 1024, fpr)) { tok = strtok(buff, " "); if (!tok) exit(-1); strcpy(bf, tok); bf[strlen(bf)-1]=NULL; fprintf(fpw, "%s", bf); while(tok=strtok(NULL," ")) { strcpy(bf, tok); bf[strlen(bf)-1]=NULL; fprintf(fpw, " %s", bf); } fprintf(fpw, "\n"); }
その他の回答 (2)
ご質問の数値というのは、char型で格納されている文字列なのでしょうか? それとも、intやlongなどで数値型で格納されているのでしょうか? 「決まったビット数で表示されている」というのも意味がよくわかりません。「決まったバイト数(桁数)で何らかの領域に格納されている」ってことでしょうか? 領域に格納された数文字列の最後の1桁を消去すると判断して、私が思いつく方法としては、 1列目のデータの先頭から、strrchr関数でヌルコードを検索しながら、strncatで数字列の長さ-1のサイズで別の用意しておいた領域にコピーして行く。 って感じでしょうか。 関数については、リファレンスで確認してください。
補足
質問する側としてのマナーを無視した質問の仕方をしてしまい 申し訳ありませんでした。 数値は、文字列で、おっしゃる通りに決まったバイト数で格納されています。
- Roba_san
- ベストアンサー率52% (18/34)
データは、文字列ですか? ファイルからの読み込みですか?それとも電文? 1行のデータ数は決まっていますか? 行の終端は\nですか?NULLですか? その辺がわからないと答え様が無いです。
補足
質問するにあたって、最低限の情報を言わずに質問してしまい 申し訳ありませんでした。 ちなみにデータは、ファイルからの読み込みです。 1行のデータ数は決まっています。 行の終端については、¥nです。
お礼
アドバイスありがとうございます! 解説付きのロジックなんて本当に助かります。 有効に使わせていただきます。