用C++写: 小红有一个字符串,她可以进行以下操作 ·拆分。把w'拆成2个v, m 拆成2个n。 。轴对称。把"b'轴对称成d’,p轴对称成q,反之亦然。 ·翻转。把b翻
以下是用C语言编写的解决方案:
```c
#include <stdio.h>
#include <string.h>
int isSymmetric(char c1, char c2) {
if ((c1 == 'w' && c2 == 'v') || (c1 == 'v' && c2 == 'w') ||
(c1 == 'm' && c2 == 'n') || (c1 == 'n' && c2 == 'm') ||
(c1 == 'b' && c2 == 'd') || (c1 == 'd' && c2 == 'b') ||
(c1 == 'p' && c2 == 'q') || (c1 == 'q' && c2 == 'p')) {
return 1;
}
return 0;
}
int isPalindrome(char* str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (!isSymmetric(str[i], str[len - i - 1])) {
return 0;
}
}
return 1;
}
int main() {
int T;
scanf("%d", &T);
getchar(); // 读取换行符
for (int i = 0; i < T; i++) {
char str[100001];
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
if (isPalindrome(str)) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
```
这个程序首先定义了一个`isSymmetric`函数,用于判断两个字符是否是轴对称的关系。然后定义了一个`isPalindrome`函数,用于判断一个字符串是否是回文串。最后,在`main`函数中,根据输入的询问次数,循环读取每个字符串,并调用`isPalindrome`函数进行判断,然后输出结果。
请注意,这个程序假设输入的字符串只包含小写字母,并且长度不超过100000。如果输入的字符串包含其他字符,可能会导致程序出错。
```c
#include <stdio.h>
#include <string.h>
int isSymmetric(char c1, char c2) {
if ((c1 == 'w' && c2 == 'v') || (c1 == 'v' && c2 == 'w') ||
(c1 == 'm' && c2 == 'n') || (c1 == 'n' && c2 == 'm') ||
(c1 == 'b' && c2 == 'd') || (c1 == 'd' && c2 == 'b') ||
(c1 == 'p' && c2 == 'q') || (c1 == 'q' && c2 == 'p')) {
return 1;
}
return 0;
}
int isPalindrome(char* str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (!isSymmetric(str[i], str[len - i - 1])) {
return 0;
}
}
return 1;
}
int main() {
int T;
scanf("%d", &T);
getchar(); // 读取换行符
for (int i = 0; i < T; i++) {
char str[100001];
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
if (isPalindrome(str)) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
```
这个程序首先定义了一个`isSymmetric`函数,用于判断两个字符是否是轴对称的关系。然后定义了一个`isPalindrome`函数,用于判断一个字符串是否是回文串。最后,在`main`函数中,根据输入的询问次数,循环读取每个字符串,并调用`isPalindrome`函数进行判断,然后输出结果。
请注意,这个程序假设输入的字符串只包含小写字母,并且长度不超过100000。如果输入的字符串包含其他字符,可能会导致程序出错。