我已经想出如何解决字符串,但我似乎无法让它工作。 也许是因为我正在使用的scanf。 请告知:)
#include<stdio.h>
#include<string.h>
int do_palindrome(char *str, int offset){
int ok = 1;
int length = strlen(str);
if(length/2 > 0)
ok = (str[0] == str[length - 1 - offset])?
do_palindrome(++str, ++offset):0;
return ok;
}
int main(){
int i = 0;
int ok = 0;
char* str[1] ;
scanf("%c", str[1]);
ok = do_palindrome(str[0], 0);
printf("%s is palindrome? : %d\n", str[0], ok);
printf("Finished!");
return 0;
}
答案 0 :(得分:1)
你正在考虑的是结构黑客:
typedef struct {
char s[1];
} String;
int main()
{
/* allocate 15 extra bytes for the string */
String *s = malloc(sizeof *s + 15);
这允许您声明一个大小为1的数组,然后将其用作可变长度,但您仍然需要给它一些内存(通过malloc)来使用它。然后,您可以通过s
访问它。
如果你想要一个可变长度的字符串,你应该malloc你需要的数据量。如果你想做一点hacky(如果你要用Gcc编译)你可以这样做:
char * str;
scanf("%ms", str);
ok = do_palindrome(str, 0);
printf("%s is palindrome? : %d\n", str, ok);
free(str);
答案 1 :(得分:0)
char* str[1] ;
声明一个char指针的数组
scanf("%c", str[1]);
读取单个char但尝试将其置于数组末尾(C数组从零开始)。
我想你想读一个字符串(char数组)。您可以使用
执行此操作char str[20]; /* change the array size as required */
scanf("%19s", str); /* read one fewer chars than your array size */
答案 2 :(得分:0)
char* str[10] ;
scanf("%s", str);
ok = do_palindrome(str, 0);
printf("%s is palindrome? : %d\n", str, ok);
您正在尝试将字符串读取为char类型,这是错误的,应该是字符串类型。此外,对do_palindrome
的子程序调用应包含str
的基址,而不仅仅是字符串的第一个字符。
答案 3 :(得分:0)
if(length/2 > 0)
ok = (str[0] == str[length - 1 - offset]) ?
do_palindrome(++str, ++offset):0;
此语句将运行(length - 1)
次。当我们检查回文时,我们只需要进行(length / 2)
比较。所以我建议将代码更改为以下内容:
if (length >= 2 && (length / 2) >= offset) {
ok = (str[0] == str[length - 1 - offset]) ?
isPalindrome(++str, ++offset) : 0;