📌  相关文章
📜  C 程序检查两个字符串是否互为 Anagram(1)

📅  最后修改于: 2023-12-03 15:13:48.230000             🧑  作者: Mango

C程序检查两个字符串是否互为Anagram

Anagram指的是由相同的字母按不同的方式组成的单词或短语。例如,“listen”和“silent”是互为Anagram的单词。本文将介绍如何在C程序中检查两个字符串是否互为Anagram。

实现思路

首先,我们需要将两个字符串中的字符按照字母表的顺序排序。然后,我们可以比较两个排序后的字符串是否相同。如果相同,则两个字符串互为Anagram。

排序两个字符串的方法有很多种,我们可以使用C标准库中的qsort函数,也可以自己实现快速排序算法。为了方便起见,本文将使用qsort函数对字符串进行排序。

代码中还需要定义一个函数,该函数可以将字符串中的空格和标点符号删除。这可以使用C标准库中的isdigit和isalpha函数实现。

代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//函数声明
void sort_string(char *str);
void remove_punct(char *str);

//主函数
int main(void) {
  char str1[100], str2[100];

  printf("请输入第一个字符串:");
  fgets(str1, 100, stdin);

  printf("请输入第二个字符串:");
  fgets(str2, 100, stdin);

  //删除空格和标点
  remove_punct(str1);
  remove_punct(str2);

  //排序字符串
  sort_string(str1);
  sort_string(str2);

  //比较两个字符串是否相等
  if (strcmp(str1, str2) == 0) {
    printf("这两个字符串互为Anagram。\n");
  } else {
    printf("这两个字符串不互为Anagram。\n");
  }

  return 0;
}

//函数定义
void sort_string(char *str) {
  int n = strlen(str);
  qsort(str, n, sizeof(char), strcmp);
}

void remove_punct(char *str) {
  int i = 0, j = 0;
  while (str[i]) {
    if (isdigit(str[i]) || isalpha(str[i])) {
      str[j++] = str[i];
    }
    i++;
  }
  str[j] = '\0';
}

在代码中,我们首先定义了两个字符数组str1和str2,用户可以输入两个字符串。接着,我们调用函数remove_punct来删除字符串中的空格和标点符号。然后,我们使用函数sort_string来对字符串进行排序。最后,我们使用函数strcmp来比较两个排序后的字符串是否相等,从而确定这两个字符串是否互为Anagram。

总结

本文介绍了如何在C程序中检查两个字符串是否互为Anagram,方法是将字符串按字母表排序,然后比较两个排序后的字符串是否相等。我们还展示了C程序的实现代码,并且解释了代码的执行逻辑。