掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26098

文字列の入出力について
投稿者---リンゴ(2006/02/13 21:51:39)


入力した文字を読み取り、出現回数を数える場合、ファイルから読み取るにはどうすればいいのですか?getchar関数では標準入力からしか読み取ることができないようなので、困っています。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字列の入出力について 26099 RiSK 2006/02/13 21:58:03
<子記事> Re:文字列の入出力について 26100 KING・王 2006/02/13 21:59:04


No.26099

Re:文字列の入出力について
投稿者---RiSK(2006/02/13 21:58:03)


>入力した文字を読み取り、出現回数を数える場合、ファイルから読み取るにはどうすればいいのですか?

fgetc


この投稿にコメントする

削除パスワード

No.26101

Re:文字列の入出力について
投稿者---リンゴ(2006/02/13 22:07:55)


>>入力した文字を読み取り、出現回数を数える場合、ファイルから読み取るにはどうすればいいのですか?
>
>fgetc
>
>fgetcはgetcharと同じ使い方で使用できるのでしょうか?


この投稿にコメントする

削除パスワード

No.26102

Re:文字列の入出力について
投稿者---RiSK(2006/02/13 22:41:52)


>fgetcはgetcharと同じ使い方で使用できるのでしょうか?

やってみましたか?
fgetcを調べてみましたか?


この投稿にコメントする

削除パスワード

No.26103

Re:文字列の入出力について
投稿者---リンゴ(2006/02/14 09:12:15)


>>fgetcはgetcharと同じ使い方で使用できるのでしょうか?
>
>やってみましたか?
>fgetcを調べてみましたか?
>
>使用してみましたが、文字を読み取れても英単語としては読み取ることができませんでした。何か良い方法はないでしょうか?


この投稿にコメントする

削除パスワード

No.26104

Re:文字列の入出力について
投稿者---Blue(2006/02/14 09:19:52)


> 文字を読み取れても英単語としては
あなたの云う英単語の定義は何でしょうか?
fgetcでも、英単語の間だけ繰り返せば、文字列になりますよ。
(格納する位置を考えるだけ)


この投稿にコメントする

削除パスワード

No.26106

Re:文字列の入出力について
投稿者---リンゴ(2006/02/14 09:44:29)


>> 文字を読み取れても英単語としては
>あなたの云う英単語の定義は何でしょうか?
>fgetcでも、英単語の間だけ繰り返せば、文字列になりますよ。
>(格納する位置を考えるだけ)
>
>スペースや改行で分けた場合です。



この投稿にコメントする

削除パスワード

No.26107

Re:文字列の入出力について
投稿者---Blue(2006/02/14 09:52:55)


説明するのめんどくさいのでサンプル。

#include <stdio.h> int main( void ) { FILE* fp; if ( ( fp = fopen( "test.cpp", "r" ) ) != NULL ) { char c; /* 読込んだ文字 */ int pos = 0; /* 格納位置 */ char word[ 256 ]; /* 格納文字列 */ while ( ( c = fgetc( fp ) ) != EOF ) { /* 読み込んだ文字で切り分ける */ /* 単語の区切りは、半角空白、タブ文字、改行文字 */ switch ( c ) { case ' ': case '\t': case '\n': if ( pos != 0 ) { word[ pos ] = '\0'; printf( "%s\n", word ); pos = 0; } break; default: word[ pos ] = c; pos++; } } fclose( fp ); } return 0; }
他にも、fgetsとstrtokを組み合わせる方法とかあります。 単語をキャッシュしていく場合、2次元配列またはポインタ型配列にします。 (ポインタ型配列のほうはmallocを使うのでちと面倒。)



この投稿にコメントする

削除パスワード

No.26108

Re:文字列の入出力について
投稿者---リンゴ(2006/02/14 10:07:44)


><pre>説明するのめんどくさいのでサンプル。
<hr>
<font color="blue">#include</font> <stdio.h>

<font color="blue">int</font> main( <font color="blue">void</font> )
{
FILE* fp;

<font color="blue">if</font> ( ( fp = fopen( <font color="purple">"test.cpp"</font>, <font color="purple">"r"</font> ) ) != NULL )
{
<font color="blue">char</font> c; <font color="green">/* 読込んだ文字 */</font>
<font color="blue">int</font> pos = <font color="red">0</font>; <font color="green">/* 格納位置 */</font>
<font color="blue">char</font> word[ <font color="red">256</font> ]; <font color="green">/* 格納文字列 */</font>

<font color="blue">while</font> ( ( c = fgetc( fp ) ) != EOF )
{
<font color="green">/* 読み込んだ文字で切り分ける */</font>
<font color="green">/* 単語の区切りは、半角空白、タブ文字、改行文字 */</font>
<font color="blue">switch</font> ( c )
{
<font color="blue">case</font> <font color="purple">' '</font>: <font color="blue">case</font> <font color="purple">'\t'</font>: <font color="blue">case</font> <font color="purple">'\n'</font>:
<font color="blue">if</font> ( pos != <font color="red">0</font> )
{
word[ pos ] = <font color="purple">'\0'</font>;
printf( <font color="purple">"%s\n"</font>, word );
pos = <font color="red">0</font>;
}
<font color="blue">break</font>;
<font color="blue">default</font>:
word[ pos ] = c;
pos++;
}
}
fclose( fp );
}
<font color="blue">return</font> <font color="red">0</font>;
}<hr>
他にも、fgetsとstrtokを組み合わせる方法とかあります。
単語をキャッシュしていく場合、2次元配列またはポインタ型配列にします。
(ポインタ型配列のほうはmallocを使うのでちと面倒。)
</pre>

'\t'っていうのが初めて見る記号なんですが、どんな役割を持っているのですか?


この投稿にコメントする

削除パスワード

No.26110

Re:文字列の入出力について
投稿者---Blue(2006/02/14 10:14:36)


調べてから質問してください。
コメントにも書いてありますが、タブ文字です。

この掲示板のホームページの
http://www9.plala.or.jp/sgwr-t/c/sec05.html
の【2. エスケープシーケンス(拡張表記)】にもちゃんと書かれています。
(掲示板だけでなく、こちらも利用しましょう。)

それと、意味のない引用は避けてください。
自分のコメントをする上で必要な部分だけ > をつかって引用してください。
(見づらいし、無駄に掲示板の領域を使っています。)


この投稿にコメントする

削除パスワード

No.26111

Re:文字列の入出力について
投稿者---nop(2006/02/14 10:17:28)


今更ですが、【掲示板利用宣言】が守られておりません。
【掲示板利用宣言】をよく読み内容を理解し、
書かれている内容を守って投稿して下さい。

>'\t'っていうのが初めて見る記号なんですが、どんな役割を持っているのですか?

まずはご自分で調査して下さい。
調査して分からなかった時、初めて質問して下さい。
その際には、どの様に調査して、どこまで調査して、どこまでは理解できたのか、
等を一緒に書き込んで下さい。
# '\n'や'\0'と同じエスケープシーケンスです。


この投稿にコメントする

削除パスワード

No.26105

Re:文字列の入出力について
投稿者---kz3(2006/02/14 09:34:53)


質問内容とは関係ありませんが、

>>>fgetcはgetcharと同じ使い方で使用できるのでしょうか?
>>
>>やってみましたか?
>>fgetcを調べてみましたか?
>>
>>使用してみましたが、文字を読み取れても英単語としては読み取ることができませんでした。何か良い方法はないでしょうか?


リンゴさん、引用の使い方間違っていますよ。
同じような使い方をしている人を他の掲示板でも見かけるんですが・・・。

レスに対する自分の返信には > 記号は用いませんよ。
人によっては"おちょくってる"なんて思われて損です。



この投稿にコメントする

削除パスワード

No.26100

Re:文字列の入出力について
投稿者---KING・王(2006/02/13 21:59:04)


とりあえず、ここのホームページの第17章ファイル入出力の内容を確認しては。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧