• 締切済み

C言語での文字列

次のようなリストファイル(list.c) 0038 tokyo 004 osaka 0021 fukuoka 0013 aomori . . を一行ずつ読み込んだとき、最初の数字の方だけを表示(または変数に格納) することは出来るのでしょうか? もしくは一文字ずつ読み込んだとして、次の文字がスペースの場合次の行へ… などと言うことも出来るのでしょうか? 2つも質問してますが、何かよいアイディアお聞かせ下さい!

  • meke2
  • お礼率79% (23/29)

みんなの回答

  • bob
  • ベストアンサー率50% (52/103)
回答No.4

char num[32]; for( int i=0; i<n_data; i++ ) { fscanf( fp, "%s%*s", num ); printf( "%s\n", num ); } でどうでしょう?

  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 スペースで区切られているんですよね。 それならば、strtok関数で簡単に分離できますよ。 使用方法は、ヘルプで参照してください。 サンプルも載っていますから、すぐに使い方は解ると思います。

  • gould09
  • ベストアンサー率33% (196/589)
回答No.2

考え方だけを説明します。 実際に使うコマンドは、自分で調べてください。 ■1行づつ読み込む場合 ・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。 ・先頭から1文字づつスペースコードを読み込むまで数字を読み込む。  (スペースは、アスキーコードの”40”?) ・アルゴリズムはスペースを探すループになります。 ■1文字づつ読み込む場合 ・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。 ・先頭から1文字づつスペースコードまたは改行コードを読み込むまで数字を読み込む。  (改行コードはキャリッジリターンとラインフィードの2バイトからなります。コードはアスキー表を見てください。) ・この場合は、改行コードを読み込んだら次の行の処理になります。 ・アルゴリズムは2重ループになります。  (改行のループとスペースを探すループ)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

fscanfの%s指定でも簡単に出来ると思いますが…。(^_^) scanf類は空白文字等を区切りとして読み込みますので。 fscanf(fp,"%s",str); とかで読めるはずです。 このときfpはオープン済みのファイルのファイルポインタです。 そして勿論strは文字列として定義しておきます。 尚、fscanfの書式についてはうろ覚えですのでご使用前に調べてみて下さい。

関連するQ&A

  • 文字列から数字を取り出す方法

    質問があります。 例えば、テキストファイルから文章を一行ずつ読み込み、それをString型の変数に格納していきます。 その文から数字(整数で、何桁かはわからない。)を取り出し(ちなみにその数字の前後には特定の文字がついています)、変数に格納するというプログラムを作りたいのですが、具体的な方法がわかりません。 よろしければ是非教えてください!

    • ベストアンサー
    • Java
  • 文字列検索 複数のテキストファイル

    最近趣味でC言語を始めたのですが、 大本のリストを含んだテキストファイルに含まれる文字列 【テキストの中身】 osaka nagoya tokyo 上のリストを行ごとに読み込んで もう一つのファイルから検索して該当する文字列を含む行以外を削除するようにしたいのですが何か良い方法はないでしょうか? 色々調べながらやってはいるもののまだまだ勉強不足なせいかわからず困っております。よろしければご教授お願いします。

  • C言語についてです。

    C言語についてです。 次のようなテキストファイルがあるとします。 ------------------------------------- Sample.txt ------------------------------------- 項目一  項目二  項目三 1      2     1 2      1     3 3      3     1 ------------------------------------- 一行目が文字列、2行目以降が整数というファイルです。 このファイルを読み込み、1行目の文字列を表示し、2行目以降を読み込んでn行3列の配列に入れ更に表示したいのですが、どのように書けばいいのでしょうか? 宜しくお願いします。

  • c言語 文字列の比較

    ファイルから読み込んだ文字列と入力した文字列を比較して同じなら次の処理を行いたいんですが、入力が例えば同じ1212でもstrcmp()で181がかえってきます。原因は何なのでしょうか? #define BUFMAX=45;  char smsg[BUFMAX];  char pass[BUFMAX];  printf("pass=%s\n",pass); printf("smsg=%s\n",smsg); c=smsg; stc=strcmp(pass,c); passにはscanfで1212を読み込みます。 smsgにはfgetsでファイルから一行読み込みます。 テキストのなかみは1212が一行はいっています。 自分では全く見当がつかないので、回答していただける方がいれば、ヒントでもいいのでお願いします。

  • C言語で文字列をかえす正しい書き方が知りたいです?

    C言語で次の警告が表示されます。 文字列を返したいのですが、正しい書き方はどのようにすれば良いのでしょうか? jci.h(20) : warning C4172; ローカル変数またはテンポラリのアドレスを返します。 char *test(char *a, int b) { char str[BUFSIZ]; return str; <------ }

  • Excelで、ある列に入力している文字にa,b,cと付け加えたい

    Excelで次のようなことをする方法を教えて下さい。 一つの列に次のように入力されています。 0001 0001 0001 0002 0002 0003 0003 0003 0003 0004 このあと0005、0006、・・・・と千行ほど続きます。 (上の例では0001が3行、0002が2行続いていますが、 同一のものが何行続くかに規則性は無く、一行のみのものや8行 くらい続くものもあります) これにa,b,cを加えて 0001a 0001b 0001c 0002a 0002b 0003a 0003b 0003c 0003d 0004a というように同じ文字が並んでいる間はa,b,c・・・と付け加えられ 文字が0001から0002などに変化すると付け加えられるアルファベットがaにもどって、そこから文字が変化するまでa,b,cと入力させたいのですが、これを自動的に入力する方法はないでしょうか? よろしくお願いします。

  • C言語でファイルからの文字列抽出について

    C言語でファイルからの文字列抽出について INPUTファイルからキーワードを探し、キーワードがあった行をOUTPUTファイルに出力したいのですが、どうしたら良いかわかりません。 //一行ずつ読み込む while(fgets(buf,sizeof(buf),fp)!=NULL){ //文字列からキーワードを探す //キーワードがある一行をOUTPUTファイルに出力 } こんな感じになると思うのですが、どういうコードを書いたら良いかわかりません。 分かる方いらっしゃいましたらご回答宜しくお願いします。

  • C言語で困っています...[文字数のカウント]

    C言語で困っているので教えていただきたいです。 ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)とワード数を数えるプログラムを作成しています。 ワード数を数えることはできたのですが、文字数をどのように数えればよいかわかりません。 while文の後にif文でワード数を数えるようにしたので、同様に文字数も数えようとしましたが、 ( )内に何を入れるべきかで行き詰まりました。 バイト数を数えるようにすればよいのだろうとは思ったのですが...、 また、3行ある英文を読み込むのですが、 このままのプログラムだと3行全体でのワード数を求めるようになってしまっています。 1行ごとに文字数、ワード数を表示するにはどうしたらよいのでしょうか? ちなみにbcc developerを使っています。 どなたか、よろしくお願いします。 /* ファイルのデータ(英文)を読み込み、    一行毎の文字数(スペースも含む)とワード数を数える */ #include<stdio.h> int main(void){ char filename[20]; printf("ファイル名を入力してください:"); scanf("%s",filename);/*ファイルの名前を指定*/ FILE *f; int c; int j=0,k=0; f=fopen(filename,"r");/*ファイルを開く*/ if(f==NULL){ printf("%sがオープンできません!\n",filename); return 1; } while((c=fgetc(f))!=EOF){ if(c==' '||c=='\n') j++; } k=k+1; printf("⇒%d文字、%dワード\n",k,j); fclose(f);/*ファイルを閉じる*/ return 0; }

  • C言語でUnicodeの文字列を扱う正しい方法が知りたいです。

    C言語でUnicodeの文字列を扱う正しい方法が知りたいです。 例えば、変数の中に格納された文字列が「a=3」かつ、文字列が「test」であれば処理を実行するといったプログラムの場合、 int a; a = 3; TCHAR file1[128]; file1 = TEXT"test"; if(a = 3 && file1 = TEXT"test"){//実行する処理}; のような形を考えましたが、エラーは出ないものの処理が実行されずに素通りしてしまいます。。 環境はVisual C++ 2008 Expressで、種類はコンソールプログラムではなく、GUIを持ったWindowsプログラムです。 どこを間違えているのでしょうか?

  • c言語の文字列出力

    プログラミング超初心者です サイトで文字列の出力について調べていたところ c言語は変数に文字列を代入することができないのでstrcpy関数を使い以下のようにするとあります char s[5]; strcpy(s, "ABCDE"); printf("%s\n", s); ところが他のサイトでは以下のように説明しています char s[5] = "ABCDE"; printf("%s\n", s); 明らかに後者の方が簡単で良いように見えるのですが違いはなんですか? あと、文字列の配列の指定?の[5]の部分なのですが 数字を記載しているところがほとんどですが省略しているところも有ります どんな文字列が入るかわからない場合もありますがここは省略しない方が良いのですか? よろしくお願いします