c - 使用函数反转 C 中的字符串

标签 c string pointers reverse

我已经搜索和阅读了几天试图解决这个问题。

我只是想用我自己的函数反转 C 中的字符串,但我现在被难住了,两天内都无法前进!

这是我的代码:

/*
This program takes a string
as input and returns it to
the user but in reverse order.
*/

#include "stdio.h"
#include "stdlib.h"
#define MAXLINE 1000

/* Take in a string and return its length. */
int getline(char s[]); 

/* Copy From to To. */
void copy(char To[], char From[]); 

/* Take the contents of a string and reverse them. */
char * reverse(char s[]);

int main() {

        char mainString[MAXLINE + 1];
        copy(mainString, "Test string.");

    printf("Your string before reversal: %s\n", mainString);
    reverse(mainString);
    printf("Your string after reversal: %s\n", mainString);

    return 0;
}


int getline(char s[]) {
    int i;
    for(i = 0; s[i] != '\0'; i++);
    i++;

    return i;
}

void copy (char To[], char From[]) {
    int i;
    for(i = 0; From[i] != '\0'; i++) {
        To[i] = From[i]; 
    }; 
    To[i] = '\0';
}


char * reverse(char s[]) {

    int string_length;
    string_length = getline(s);

    char myString[MAXLINE];
    int a = 0;

    int i;
    i = string_length;

    while (i >= 0) {
        s[i] = myString[a];
        a++;
        i--;
    };
    copy(s, myString);

    return s;
}

最佳答案

删除 getline 函数末尾的 i++。这导致返回的字符串长度比应有的长度多 1,进而导致 '\0' 成为反转字符串的第一个字符,这是不应该发生的。

此外,该行

s[i] = myString[a];

是错误的。这会更改 s,但您想更改 myString:

myString[i] = s[a];

(或者,您可以在 while 循环之前执行 copy(myString, s); 来填充 myString,然后反向将数据从那里复制回 s。)

关于c - 使用函数反转 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962677/

相关文章:

c - Openwrt-创建固件布局描述失败

c - 在 C 中为内部结构返回类型时不兼容的类型

c - 从指针数组中删除元素

c - 为什么我的算术平均函数总是返回 0?

c - 在 C 中为自引用结构分配内存

c - 取malloc()、realloc()和free()的地址是否可移植?

C# float.ToString 舍入值

algorithm - 数据如何存储在文本框中?

java - 将大型 JSON (InputStream) 放入 String 时出现内存不足错误

c - C 中的文件输入和数组指针