在C中打印反转的字符串/数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C中打印反转的字符串/数组相关的知识,希望对你有一定的参考价值。
我正在尝试打印反向字符串/数组。我已经使用了以下代码,它似乎能够从第一个数组revString
以正确的顺序给出我的第二个数组string
值。我也能够在两个数组中打印单个字符,并且我能够打印第一个数组的整个字符串。但是revString
阵列根本不打印。我想知道我是否在这里错过了一个重点。
void reverseString(char string[]) {
int i = strlen(string);
int i_2 = 0;
revString arrayet
char revString[i + 1];
char *character;
while (i > -1) {
character = &string[i];
revString[i_2] = *character;
printf("%c", revString[i_2]);
i = i - 1;
i_2 = i_2 + 1;
}
revString[i_2] = ' ';
printf("%d
", i_2);
printf("%s", revString);
}
代码现在给出了以下输出,带有示例字符串"Hello World"
;
dlrow olleH13
如你所见,最终的printf
声明没有做任何事情
答案
在C语言中,索引是基于0的。所以,如果你创建一个10长度的字符串,最后一个字符将在索引9。
在您的代码中,当您将字符分配给revString时,您的代码正在尝试访问字符串[len]。
你的代码应该是这样的..
int i = strlen(string) - 1;
另一答案
您的代码在string
中反转字符串string[i]
,包括空终止符。结果数组以null终止符开头,因此printf
不输出任何内容。
这是一个修改版本:
void reverseString(char string[]) {
int i = strlen(string);
int i_2 = 0;
char revString[i + 1];
char character;
while (i > 0) {
i = i - 1;
character = string[i];
revString[i_2] = character;
//printf("%c", revString[i_2]);
i_2 = i_2 + 1;
}
revString[i_2] = ' ';
printf("%d
", i_2);
printf("%s", revString);
}
输出:
11
dlrow olleH
以上是关于在C中打印反转的字符串/数组的主要内容,如果未能解决你的问题,请参考以下文章