ページ 11

英語の文書の一番長い単語

Posted: 2012年12月19日(水) 11:44
by 齊藤
テキストファイルで英文(各単語半角スペースで区切られている)
の中から一番長い単語を抽出してコマンドプロンプト上に表示するプログラムが全然わかりません。

どなたか教えてくださると助かります。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 11:48
by みけCAT
丸投げは禁止です。フォーラムルールをお読みください。
まずは使用する言語や開発環境を教えてください。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:02
by h2so5
Rubyで

コード:

File.read("foo.txt").split(" ").max_by{ |w| w.length }

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:04
by 齊藤
単語数を表示するプログラムを拡張しようと試みました以下
#include<stdio.h>

int main()
{

int c, f = 0;
int *i,*p;
int t=0;
FILE *fp;

fp = fopen("D:\\test002.txt","r");


while((c = getc(fp)) != EOF)
{

for(i=0;i<456;i++)
{
if(c == ' ' || c== '\n' || c == '.' || c == ',')
{
t=*p;

}
f = 0;
}

}
fclose(fp);
printf("%s\n ",t);

return 0;
}

しかしこれはまったくエラーばかり どこが悪いのかわかりません。

開発環境はボーランドC

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:06
by みけCAT
コードはcodeタグで囲んでください。
エラーメッセージを貼り付けてください。
実行時エラーでしたら、どのような動作を期待し、実際はどのようになったかを教えてください。

コード:

#include<stdio.h>

int main()
{

	int c, f = 0;
	int *i,*p;
	int t=0;
	FILE *fp;

	fp = fopen("D:\\test002.txt","r");
	/* ファイルを開けたかチェックしたほうがいい */

	while((c = getc(fp)) != EOF)
	{

		for(i=0;i<456;i++) /* なぜ? */
		{
			if(c == ' ' || c== '\n' || c == '.' || c == ',')
			{
				/* tはint型なので配列添字アクセスは不可能 */
				/* pが初期化されていないのでアクセス違反 */
				/* iはポインタ型なので不適切 */
				t[i]=*p; 

			}
			f = 0;
		}

	}
	fclose(fp);
	printf("%s\n ",t); /* tはint型なので型の不一致・アクセス違反の危険 */

	return 0;
}

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:09
by 齊藤
<code>
#include<stdio.h>

int main()
{

int c, f = 0;
int *i,*p;
int t=0;
FILE *fp;

fp = fopen("test.txt","r");


while((c = getc(fp)) != EOF)
{

for(i=0;i<456;i++)
{
if(c == ' ' || c== '\n' || c == '.' || c == ',')
{
t=*p;

}
f = 0;
}

}
fclose(fp);
printf("%s\n ",t);

return 0;
}
</code>

エラー
comparison between pointer and integer

期待する結果

test.txt内にある単語のうち一番長い単語を表示

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:16
by 齊藤

コード:

#include<stdio.h>

int main()
{

  int c, f = 0;
  int *i,*p;
  int t=0; 
FILE *fp;

fp = fopen("D:\\test002.txt","r");


  while((c = getc(fp)) != EOF) 
  { 

          for(i=0;i<456;i++)
           {
            if(c == ' ' || c== '\n' || c == '.' || c == ',')
             {
                            t[i]=*p;
                            
                            }
                     f = 0;
              }
               
              }
fclose(fp);
printf("%s\n ",t);

return 0;
}
エラーはさっきの

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:20
by softya(ソフト屋)
まず、配列やポインタの使い方が出鱈目です。勉強されたんですよね?

処理に必要だと想定しているc,f,i,p,tの変数の役割を言葉で書きだしてみて下さい。
それと、なぜ456なのかは私も教えて欲しいです。どこから出てきたんですか?

インデントも揃えたほうが良いでしょう。すごく読み辛いです。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:26
by 齊藤
c,f,i,p,t
c ポインタ
f行間

i 単語の番号

p 単語

t単語の変数

ですよね!

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:27
by non
齊藤 さんが書きました: しかしこれはまったくエラーばかり どこが悪いのかわかりません。
「どこが悪いのか」というより、「なぜ、これで動くと思っているのか」理解できないので
どう、アドバイスすればよいのかわからないですね。
齋藤さんがどのような考え方(アルゴリズム)で作ろうとしているのか説明してください。

PS. ソフト屋さんとかぶった

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:30
by Rinfo
サンプル書いてあげればいいんじゃないでしょうか?

齊藤さんもそれみて理解できると思うし。

私はちょっと時間が無いので・・・。

ファイル名だけちがくしてあげてさ

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:31
by softya(ソフト屋)
齊藤さん、自作自演しないで下さい。
デメリットはあっても意味無いですよ。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:33
by 齊藤
なんでばれたんでしょうか・・・。

ぜんぜnわかんなくて。

もうそうしたらいいか・・。

このままだと故郷に残してきた祖母より先に現世とおさらばかと思われます・・・。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:35
by softya(ソフト屋)
アドバイスを受けて自分で勉強してする気はもう無いということでしょうか?

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:36
by 高橋
あります。

ですがなにからやればいいのかわからないのです。

さきほどC言語を学びました。

そんな僕が出された課題がこれです。

すこしでいいんです。

char型なのかとか おしえてください。

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:42
by ごごごわわ
あああああ

Re: 英語の文書の一番長い単語

Posted: 2012年12月19日(水) 12:43
by softya(ソフト屋)
解決されたようですが、折角書いたので。
名前をコロコロ変えないでください。
それと配列とポインタを学んでいるはずです。
さきほど学んだといえる内容ではないので学校から何週間か何ヶ月はC言語を勉強しているはずですよね?

下記サイトの内容で言えば、「17.ファイルの取り扱い」まで学んでいないと出されない課題だと思います。
「苦しんで覚えるC言語」
http://9cguide.appspot.com/

ちなみに現状は
c:int型 → 読み込んだ一文字
f:int型 → 意図不明
i:int型ポインタ → 未初期化なので使ってはいけません。
p:int型ポインタ → 未初期化なので使ってはいけません。
t:int型 → 意図不明。多分表示する最長単語のポインタが欲しい?

456:出所不明