#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void main( void ) {
int hindo[26];
int i, c;
char name[20];
FILE *fp;
setbuf(stdout,0);
if ( (fp = fopen("fdct2.c", "r")) == NULL ) {
printf( "* Cannot open file.\n" );
exit( EXIT_FAILURE );
}
for ( i = 0; i < 26; ++i )
hindo = 0;
while ( (c = getc( fp )) != EOF )
if ( isalpha ( c ) )
++hindo[ c - 'a' ];
fclose( fp );
for ( i = 0; i < 26; ++i ) {
printf( "%c → %d\n", 'a' + i, hindo );
}
printf("名前をアルファベットで入力 ");
scanf("%s", name);
for ( i = 0; i < name; ++i ) {
printf("%c → %d\n",name, hindo[name - 'a']);
}
}
ここから名前の中に重複する文字があったら、その文字のプログラム中での出現回数を、アルファベット順に一度だけ表示するように作り変えたいのですが、どうすればいいか教えてください。
お願いします
Re: お願いします
次回からソースコードを貼り付ける際はcodeタグをお使い下さい。詳しくはフォーラムルールや投稿前チェックリストを御覧ください。
phoenさんの投稿では、現在のプログラムがどのような動きをするのかがまったく書かれていませんので、書いて下さい。
「現在は~~という動作ですが、◯◯という動作に変えたいです」という感じで書けばいいでしょう。
phoenさんの投稿では、現在のプログラムがどのような動きをするのかがまったく書かれていませんので、書いて下さい。
「現在は~~という動作ですが、◯◯という動作に変えたいです」という感じで書けばいいでしょう。
とありますが、この「プログラム」とは何でしょうか。fdct2.cというファイルの中身のことでしょうか。phoen さんが書きました:その文字のプログラム中での出現回数を
-
phoen
Re: お願いします
fdct2.cというファイルの中身のことでしょうか。[/quote]
そうです
現在はキーボードから名前をアルファベットで入力し、ファイルの中の文字の出現回数のうち、入力した文字に該当する出現回数を表示しているの動作ですが、名前の中に重複する文字があったら、その文字のプログラム中での出現回数をアルファベット順に一度だけ表示するように作り変えたいです
例 tanaka と入力した場合
t ⇒ 2 a ⇒ 12 n ⇒ 5 a ⇒12 k ⇒ 6 a ⇒12
a ⇒ 12 k ⇒ 6 n ⇒ 5 t ⇒ 2
今が上の状態なので下のようにしたいです
そうです
現在はキーボードから名前をアルファベットで入力し、ファイルの中の文字の出現回数のうち、入力した文字に該当する出現回数を表示しているの動作ですが、名前の中に重複する文字があったら、その文字のプログラム中での出現回数をアルファベット順に一度だけ表示するように作り変えたいです
例 tanaka と入力した場合
t ⇒ 2 a ⇒ 12 n ⇒ 5 a ⇒12 k ⇒ 6 a ⇒12
a ⇒ 12 k ⇒ 6 n ⇒ 5 t ⇒ 2
今が上の状態なので下のようにしたいです
Re: お願いします
なるほど。ではヒントを差し上げます。
入力された名前(例えばtanaka)のなかで、使われているアルファベットは何かを探します。
こんな感じにすれば、nameにどのアルファベットが何文字含まれているかを検出できます。
ちなみに、お示しのソースコードの最後の方に という行がありますが、これはたまたま正常に動いているだけだと思いますので、改良をおすすめします。特にi < nameのあたりを。
入力された名前(例えばtanaka)のなかで、使われているアルファベットは何かを探します。
int used_characters[26];
// used_charactersを0クリア
for (i = 0; i < strlen(name); ++i)
{
used_characters[name[i] - 'a']++;
}
ちなみに、お示しのソースコードの最後の方に という行がありますが、これはたまたま正常に動いているだけだと思いますので、改良をおすすめします。特にi < nameのあたりを。