我应该在我的代码中包含toupper(),以便制作像Noon或NoOoON这样的回文来说它是回文而不是说它不是回文。我似乎无法弄明白。感谢。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void reverse(char s[]){
int c, i , j;
for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
return;
}
int main(){
char a[20];
char b[20];
printf("Enter a string:\n");
gets(a);
strcpy(b,a); // copies string a to b
reverse(a); // reverses string b
if(strcmp(a, b) == 0) { // compares if the original and reverse strings are the same
printf("The string is a Palindrome\n");
}
else {
printf("The string is not a Palindrome\n");
}
return 0;
}
答案 0 :(得分:1)
在您的情况下,您可以使用_stricmp
代替strcmp
。
另一种解决方法是在输入后将字符串转换为单个案例。 例如
for (char *c = a; *c; c++) *c = toupper(*c);
答案 1 :(得分:1)
如果您想使用toupper()
,那么您应该在复制字符串之前应用它并将其反转。
那是:
int main() {
char a[20];
char b[20];
int i = 0;
printf("Enter a string:\n");
gets(a);
// make the change here
for (i = 0; i < strlen(a); i++) {
a[i] = toupper(a[i]);
}
strcpy(b, a);
如果稍后将字符串转换为单个案例,则副本将与原始字母不同,或者您必须同时toupper()
。