c语言判断异序字符串
时间: 2024-10-06 22:02:56 浏览: 28
在 C 语言中,判断两个字符串是否为异序字符串(即字符顺序不同但字符总数相等且包含的字符种类相同),可以采用哈希表(如数组或 map)的方法。以下是一个简单的步骤:
1. 定义两个哈希表(或数组)用于存储每个字符及其出现的次数。
2. 遍历第一个字符串,将每个字符作为键(key)存入哈希表,并增加相应字符的计数。
3. 再遍历第二个字符串,如果当前字符不在哈希表中,说明字符种类不匹配;如果在,则减少该字符的计数。
4. 遍历结束后,检查两个字符串对应的字符计数是否全部相等。如果所有字符的计数都减完并且没有剩余的计数,说明这两个字符串是异序的。
以下是一个简单的示例代码片段:
```c
#include <stdio.h>
#include <stdbool.h>
bool areAnagram(char* str1, char* str2) {
int count[256] = {0}; // 假设只考虑ASCII字符
int i;
// 初始化第一个字符串的字符计数
for (i = 0; str1[i] != '\0'; i++) {
count[str1[i]]++;
}
// 减去第二个字符串对应字符的计数
for (i = 0; str2[i] != '\0'; i++) {
count[str2[i]]--;
if (count[str2[i]] < 0) {
return false; // 如果某个字符计数变为负数,说明不是异序字符串
}
}
// 所有字符处理完毕,如果没有剩余计数则返回true
return true;
}
int main() {
char str1[] = "listen";
char str2[] = "silent";
if (areAnagram(str1, str2)) {
printf("'%s' and '%s' are anagrams.\n", str1, str2);
} else {
printf("'%s' and '%s' are not anagrams.\n", str1, str2);
}
return 0;
}
```
阅读全文