文字列のアナグラムを見つけるコードは次のとおりです。私はそれを行うポインタ配列を使用していますが、ポインタの算術を使用してそれをしたい。ポインタ演算を使用する文字列のアナグラム
#include <stdio.h>
int check_anagram(char [], char []);
int main()
{
char a[100], b[100];
int flag;
printf("Enter first string\n");
gets(a);
printf("Enter second string\n");
gets(b);
flag = check_anagram(a, b);
if (flag == 1)
printf("\"%s\" and \"%s\" are anagrams.\n", a, b);
else
printf("\"%s\" and \"%s\" are not anagrams.\n", a, b);
return 0;
}
int check_anagram(char a[], char b[])
{
int first[26] = {0}, second[26] = {0}, c = 0;
while (a[c] != '\0')
{
first[a[c]-'a']++;
c++;
}
c = 0;
while (b[c] != '\0')
{
second[b[c]-'a']++;
c++;
}
for (c = 0; c < 26; c++)
{
if (first[c] != second[c])
return 0;
}
return 1;
}
- >ポインタ演算を使用してそれを見つける方法。 >それが動作するように、我々は以下の方法にそれを修正することができます
while(*(a+c)!='\0')
{
*(first *(a+c)-'a')++;
c++;
}
アナグラム例:銃 - > NUG。 game-> agem – King
CやC++で配列を使うときは、すでにポインタを使っています。ローポインタを使うように変換するとスピードを上げることができず、コードを読むのがずっと難しくなります。あなたがこれをやっている理由はありますか? – Dai
ところで、アナグラムを検出するために2つのヒストグラムは必要なく、1つのヒストグラムと2つのループだけでアナグラムを検出できるので、プログラムを33%高速化できます。 – Dai