用c语言代码判断输入的两个字符串是否为异构字符串
时间: 2024-10-06 18:03:07 浏览: 35
在C语言中,异构字符串是指由相同的字符组成但是字符的顺序不同的两个字符串。下面是一个简单的函数示例,用于检查两个字符串是否为异构字符串:
```c
#include <stdio.h>
#include <string.h>
int areIsomorphic(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
// 如果长度不同,它们不可能是异构的
if (len1 != len2) {
return 0;
}
// 使用两个数组来存储对应字符的位置索引
int map1[128] = {0}, map2[128] = {0};
for (int i = 0; i < len1; ++i) {
// 如果第一个字符串的字符尚未映射,则分配位置
if (map1[str1[i]] == 0) {
map1[str1[i]] = map2[str2[i]];
}
// 如果第二个字符串的字符已经映射到其他位置,则不是异构
else if (map1[str1[i]] != map2[str2[i]]) {
return 0;
}
// 更新第二个字符串的映射位置
map2[str2[i]]++;
}
// 如果所有字符都成功映射,说明是异构字符串
return 1;
}
int main() {
char str1[] = "egg", str2[] = "add";
if (areIsomorphic(str1, str2)) {
printf("'%s' and '%s' are isomorphic.\n", str1, str2);
} else {
printf("'%s' and '%s' are not isomorphic.\n", str1, str2);
}
return 0;
}
```
在这个例子中,我们首先检查两个字符串的长度是否相等,然后用两个数组`map1`和`map2`分别存储每个字符在另一个字符串中的相对位置。如果发现有冲突(即某个字符映射到了不止一个位置),则返回0表示不是异构;否则返回1表示是异构。
阅读全文