首页 > 解决方案 > 如何使用整数作为索引来反转 c 中的字符串?(不使用 strlen() 或其他字符串库)

问题描述

我想使用函数反转字符串。这是我写的程序:

#include <stdio.h>

void reverse_string(char array[50]) {
    int lastindex, j;
    int i;
    char temp;
    for (j = 0; j <= 49; j++) {
        if (array[j] == '\0') {  \\access the index for null character
            break;
        }
        if (j != 0) {                                             
            lastindex = j - 1;  \\get last index of character string
        } else {
            lastindex = 0;
        }
    
        for (i = 0; i <= lastindex; i++) {
            temp = array[i];
            array[i] = array[lastindex];
            array[lastindex] = temp;
            lastindex--;
        }
        array[i + 1] = '\0';
    }
}

int main() {
    char myarray[500] = "Meglovania";
    reverse_string(myarray);
    printf("%s", myarray);
    return 0;
}

但是,我得到了错误的输出:Me

我想知道如何在不显式使用指针的情况下反转字符串。

标签: cstringreverse

解决方案


尝试注释掉多余的i++. 而且因为i在字符串中间附近的某个地方结束,所以这不是您想要删除空字符的地方。请记住,您传递给函数的字符串已经以空值结尾。

此外,如果i == lastindex没有必要进行交换。

    //for(i=0;i<=lastindex;i++){
      for(i=0;i<lastindex;i++){
        temp = array[i];
        array[i]= array[lastindex];
        array[lastindex]=temp;
        //i++;
        lastindex--;
    }
    //array[i+1]='\0';

正如@r3mainer 指出的那样,您的代码格式很糟糕。你在另一个里面有一个循环。我不得不将整个东西粘贴到我的 IDE 中并构建它,以解决剩下的问题。这有效:

#include<stdio.h>

void reverse_string(char array[50])
{   int lastindex,j;
    int i;
    char temp;
    
    for(j = 0;j<=49;j++){
        
        if(array[j]=='\0'){
            break;
        }
    }
    
    if(j!=0){                                             
        lastindex = j-1;

    }   
    else{
        lastindex = 0;
    }
    
    for(i=0;i<lastindex;i++){
        temp = array[i];
        array[i]= array[lastindex];
        array[lastindex]=temp;
        lastindex--;
    }
    //array[i+1]='\0'; 
}

int main()

{
    char myarray[500]="Meglovania";
    reverse_string(myarray);
    printf("%s",myarray);
    return 0;

}

这对眼睛来说更容易:

#include<stdio.h>

int string_length(char *array)
{
    int counter = 0; // Doubles as an index.

    while('\0' != array[counter]) counter++;

    return counter;
}

void reverse_string(char array[50])
{
    int i;
    char temp;
    int lastIndex = string_length(array) - 1;
        
    for(i=0;i<lastIndex;i++){
        temp = array[i];
        array[i]= array[lastIndex];
        array[lastIndex]=temp;
        lastIndex--;
    }
}

int main()

{
    char myarray[50]="Meglovania";
    reverse_string(myarray);
    printf("%s",myarray);
    return 0;

}

您在反向代码中嵌入了字符串长度代码,这只是不好的做法。一个函数通常应该只做一件事并在需要其他值时调用其他函数,所以我创建了一个string_length函数,最初使用您的代码版本,但我不能遵守它,所以也要清理它。

我希望你从这个练习中学到了一些东西。代码格式非常重要。每次在代码中输入左大括号“{”时,立即添加右大括号},然后在它们之间插入所需的任何代码。


推荐阅读