• ベストアンサー

ポインタを使って

みなさんこんにちは。 初歩的な質問ですみません。m(_ _)m キーボードから二つの文字列を読み込んだ場合、 読み込んだ文字列の中に同じ文字があるか、あれば その個数を数えるプログラム と言う問題があるのですが。 上記のプログラムは、for文を使って、一つ一つの文字をstrcmpを使って表示するべきものなのでしょうか。 もし、文の意味が違っていたり、もっと簡単なやりかたがありましたら、教えてください。 初歩的で申し訳ございません。

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

  • ベストアンサー
回答No.2

   こういうのかな? #include <stdio.h> int main(void) { char *s0 = "abcdefg", *s1 = "efghijk"; int c[256] = {0}; int count = 0, i; for(i = 0; s0[i] != '\0'; i ++) c[s0[i]] |= 1; for(i = 0; s1[i] != '\0'; i ++) c[s1[i]] |= 2; for(i = 0; i < 256; i ++) count += (c[i] == 3); printf("%d", count); return 0; }  

k_yoshi
質問者

お礼

解答ありがとうございます。 早速試してみたら少しエラーが出たのでで、このソースを元に、書き直したら、できました。

その他の回答 (2)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

strcmpは「文字列」を比較する関数。 「文字」を比較するのには使えない。普通に==で行う。 なので、 「for文を使って、一つ一つの文字を==或いは!=を使って」比較すればよい。 ループの回数はstrlenを使えばわかりそうだね。

k_yoshi
質問者

お礼

解答ありがとうございます。 たしかに、strcmpばかり、考えていたもんで。 気づきませんでした。

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.1

"yamada", "tanaka" の場合、どのような出力が欲しいか補足して下さい。 また、一つ一つの文字を各個照査するならば strcmpを用いるまでもない(用いるべきではない)。 数値の比較で足りる。例えばこんなの↓ int main(int argc, char** argv) {  char *plhs, *prhs;  int founded;  if ( argc != 3 ) {   puts ("must two strings.");   return 1 /* EXIT_FAILURE */;  }  for ( prhs = *(argv + 2); *prhs; ++prhs ){   founded = 0;   for ( plhs = *(argv + 1); *plhs; ++plhs )    if ( *prhs == *plhs ) ++founded; /* compare */   if ( founded > 0 ) printf("'%c' founded %d count.\n", *prhs, founded);  }  return 0; } #工夫もへったくれもないソースなので #丸々コピペして提出というのはダメね。

k_yoshi
質問者

お礼

早い解答ありがとうございます。 yamada tanaka の場合 出力としては、「aが六個あります。」と言った出力で、 kazu nihon の場合だと 同じ、文字は、ありません。と言う出力 です。 ソースを参考にして作ってみたいと思います。

関連するQ&A