OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

C言語でのプログラム

  • すぐに回答を!
  • 質問No.238717
  • 閲覧数49
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 92% (36/39)

23481 34958 432 ・・・  
83829 93828 210 ・・・  
  ・     ・    ・
  ・     ・    ・
  ・     ・    ・
上の様に各列に対して決まったビット数で表示されている数値のデータの
一番最後の桁(一番上の行なら 1、8、2)を消去するプログラムを
作りたいのですが、
各数値の間にスペースがあるので、ヌルコードの一つ手前の数値を消去すると考えたほうが良いのか、それともビット数(桁数)が決まっているので各列に対して最後の桁を指定して消去した方が良いのでしょうか?
また、その「消去する」という
プログラムには何の関数を使ったら良いのでしょうか?

このプログラムへの取っ掛りが見つからず、困っています。よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 24% (612/2465)

データの間にスペースがあるので、このデータがファイルにあると仮定します。
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");
}
お礼コメント
davi8

お礼率 92% (36/39)

アドバイスありがとうございます!
解説付きのロジックなんて本当に助かります。
有効に使わせていただきます。
投稿日時 - 2002-03-21 22:05:57
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 52% (18/34)

データは、文字列ですか? ファイルからの読み込みですか?それとも電文? 1行のデータ数は決まっていますか? 行の終端は\nですか?NULLですか? その辺がわからないと答え様が無いです。 ...続きを読む
データは、文字列ですか?
ファイルからの読み込みですか?それとも電文?
1行のデータ数は決まっていますか?
行の終端は\nですか?NULLですか?

その辺がわからないと答え様が無いです。
補足コメント
davi8

お礼率 92% (36/39)

質問するにあたって、最低限の情報を言わずに質問してしまい
申し訳ありませんでした。
ちなみにデータは、ファイルからの読み込みです。
1行のデータ数は決まっています。
行の終端については、¥nです。
投稿日時 - 2002-03-21 13:07:56


  • 回答No.2

ご質問の数値というのは、char型で格納されている文字列なのでしょうか? それとも、intやlongなどで数値型で格納されているのでしょうか? 「決まったビット数で表示されている」というのも意味がよくわかりません。「決まったバイト数(桁数)で何らかの領域に格納されている」ってことでしょうか? 領域に格納された数文字列の最後の1桁を消去すると判断して、私が思いつく方法としては、 1列目のデータの ...続きを読む
ご質問の数値というのは、char型で格納されている文字列なのでしょうか?
それとも、intやlongなどで数値型で格納されているのでしょうか?
「決まったビット数で表示されている」というのも意味がよくわかりません。「決まったバイト数(桁数)で何らかの領域に格納されている」ってことでしょうか?

領域に格納された数文字列の最後の1桁を消去すると判断して、私が思いつく方法としては、
1列目のデータの先頭から、strrchr関数でヌルコードを検索しながら、strncatで数字列の長さ-1のサイズで別の用意しておいた領域にコピーして行く。
って感じでしょうか。
関数については、リファレンスで確認してください。
補足コメント
davi8

お礼率 92% (36/39)

質問する側としてのマナーを無視した質問の仕方をしてしまい
申し訳ありませんでした。

数値は、文字列で、おっしゃる通りに決まったバイト数で格納されています。
投稿日時 - 2002-03-21 13:13:02
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ