【问题标题】:Reversing char array in C programming在 C 编程中反转 char 数组
【发布时间】:2016-03-11 00:18:18
【问题描述】:

我是 c 编程语言的新手。我正在尝试反转 char 数组中的元素。实际上,我几乎逆转了,但有些事情我做不到。 这是代码:

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

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

【问题讨论】:

  • 您确定这是您使用的代码吗?这不应该编译,因为您在 length 的声明中有错字;那么它应该会崩溃,因为您通过访问 word[length + 1] 来启动循环,这是 2 个超出范围的索引。
  • 您的 for 循环条件错误。数组的索引从 0 到 length-1。请尝试以下操作:for (j=length-1; j>0; j--) 这将从最后一个字符开始并重复直到第一个字符。更好的是,习惯使用您的调试器。
  • 是的,我确定。我给了参数“书”。输出是“aakoob”。
  • 致所有读者:已经说过“我是 c 编程语言的新手”,让这个家伙放松一下,不要对这个问题投反对票或近距离投票。

标签: c arrays char reverse


【解决方案1】:

正确的代码是

for(j=length-1; j>=0; j--){
   printf("%c", word[j]);

这是因为字符串的元素从0 索引到length-1。例如,

word == "Hello"
length == 5
word[0] == 'H'
word[1] == 'e'
word[2] == 'l'
word[3] == 'l'
word[4] == 'o'

【讨论】:

  • 我试过这个,但是当我给出单词[100]={“看看天空”}。它没有逆转。
  • @Sahin 改用strcpy(word, "Look at Sky"}
【解决方案2】:

这里有一个工作示例:

#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 您能否接受(也许赞成 ;-))一个答案,以便问题得到回答。谢谢。
【解决方案3】:

我希望这将是击球手的解决方案。

没有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;
}

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2017-10-08
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2015-02-11
    • 2021-09-02
    • 2014-08-13
    • 2020-09-15
    相关资源
    最近更新 更多