gpt4 book ai didi

C:回文:不同的strlen值

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:50 26 4
gpt4 key购买 nike

我正在编写一个函数来反转字符串并检查该字符串是否为回文。当我用像“abba”这样明显的回文来测试函数时,函数说它不是回文。此外,正向字符串和反向字符串的字符串长度也不同!

#include <stdio.h>
#include <string.h>

char forward [] = "abba"; //The string to be reversed

int size = (sizeof(forward)/sizeof(forward[0]) - 1);
int j = 0;
char reverse [10];

void reverser(char forward []) {

printf("%s", "String forward: ");
for (int i = 0; i < size; i++) { //Function for printing out the forward string.
printf("%c", forward[i]);
}

printf("\n");

printf("%s", "String reversed: ");

for (int i = size, j = 0; i >= 0; --i, ++j) { //Function for reversing the string and printing it.
reverse[j] = forward[i];
printf("%c", reverse[j]);
}

printf("\n");

if (strcmp(forward, reverse) != 0) { //Using strcmp to check if the forward and reversed string are the same.
printf("Not a palindrome!\n");
}
else{
printf("A palindrome!\n");
}

printf("Forward string length: %d\n",strlen(forward));
printf("Reversed string length: %d\n",strlen(reverse));
}

int main () {
reverser(forward);
}

输出:
字符串转发:abba
字符串反转:abba
不是回文!
正向字符串长度:9
反转字符串长度:0

最佳答案

在这个循环中

for (int i = size, j = 0; i >= 0; --i, ++j) { //Function for reversing the string and printing it.
reverse[j] = forward[i];
printf("%c", reverse[j]);
}

forward[i] 是当变量 i 的初始值等于 size

时字符串的终止零

尝试下面的循环实现

for ( int i = size, j = 0; i != 0; ++j) { //Function for reversing the string and printing it.
reverse[j] = forward[--i];
printf("%c", reverse[j]);
}

还要考虑到,对于将存储由运算符 sizeof 或函数 strlen 返回的值的变量,最好使用类型 size_t.

所以在这些语句中

printf("Forward string length: %d\n",strlen(forward));
printf("Reversed string length: %d\n",strlen(reverse));

使用格式说明符 %zu 而不是 %d

例如

printf("Forward string length: %zu\n",strlen(forward));
printf("Reversed string length: %zu\n",strlen(reverse));

这里的一些回答者说你必须以零结束字符串reverse。然而,它已经是零终止的,因为它是在任何函数之外声明的,因此它具有静态存储持续时间,因此默认情况下它是零初始化的。

关于C:回文:不同的strlen值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34093093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com