在C编程中反转字符数组

4

我是c语言的新手,正在尝试反转字符数组中的元素。实际上,我几乎已经完成了反转,但还有一些问题我无法解决。

以下是代码:

void q2_reverseTheArray(char word[100]){
int lentgh=sizeof(word);
int j;
for(j=length+1; j>=0; j--){
    printf("%c", word[j]);
}

这段代码将数组反转,但它添加了另一个字母。


2
你确定这是你正在使用的代码吗?这不应该编译,因为在 length 的声明中有一个拼写错误;然后它应该崩溃,因为你通过访问 word[length + 1] 来开始循环,而这超出了2个索引范围。 - Arc676
你的for循环条件是错误的。数组的索引从0到length-1。尝试使用以下代码:for (j=length-1; j>0; j--) 这将从最后一个字符开始重复,直到第一个字符。更好的方法是熟悉使用调试器。 - enhzflep
是的,我确定。我给出了参数“book”。输出结果是“aakoob”。 - Sahin
给所有读者:既然他说了“我是新手,对C编程语言不熟悉”,请大家宽容些,不要对这个问题进行负面评价或关闭投票。 - barak manos
可能是作为参数传递的数组的大小的重复问题。 - n. m.
3个回答

5

这里有一个可工作的示例:

#include <stdio.h> // printf
#include <stdlib.h> // malloc, free
#include <string.h> // strlen

int main() {
  char* s = "hello";
  size_t l = strlen(s);
  char* r = (char*)malloc((l + 1) * sizeof(char));
  r[l] = '\0';
  int i;
  for(i = 0; i < l; i++) {
    r[i] = s[l - 1 - i];
  }
  printf("normal: %s\n", s);
  printf("reverse: %s\n", r);
  free(r);
}

你的代码在 length + 1 处出现了错误,应当改为 length - 1

同时,你需要注意到结尾的字符 '\0'


谢谢!我通过计算每个元素来找到长度解决了这个问题。 - Sahin
@Sahin,您能否接受(并可能点赞;-))一个答案,以便问题得到解答。谢谢。 - linluk

4
正确的代码是:
for(j=length-1; j>=0; j--){
   printf("%c", word[j]);

这是因为字符串的元素从0length-1进行索引。例如,
word == "Hello"
length == 5
word[0] == 'H'
word[1] == 'e'
word[2] == 'l'
word[3] == 'l'
word[4] == 'o'

我尝试了这个,但当我给出word[100]={"Look at Sky"}时,它没有反转。 - Sahin
@Sahin 尝试使用 strcpy(word, "Look at Sky") 代替。 - Andrej Adamenko

0

我希望这将是更好的解决方案。

不需要string.h头文件

 main()
{
    char str1[100], str2[100];
    int i, k, j;
    scanf("%s", &str1);
    for(i=0; str1[i] != '\0'; i++ );
    j=i-1;
    for(k=0; k<=i; k++)
    {
        str2[k]=str1[j];
        j--;
    }
    for(k=0; k<i; k++)
        printf("%c", str2[k]);
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接