繁体   English   中英

在 C 语言中反转字符串

[英]Reversing a string on C language

在这个程序中,允许用户输入最多 20 个字母的单词,这些单词存储在另一个数组中并从末尾开始打印。 但是我的代码有错误,我输入一个单词后程序输出单个字母。 那是我的代码。

#include <stdio.h>

int main(void) {
    char user[21]; // created an array and let users enter letters
    char reverse[21]; // create an array and store the reversing string
    printf("Please enter the word that you want to reverse: \n");
    scanf("%20s", user);
    int length = sizeof(user) / sizeof(user[0]);
    int rever_index = 0;

    for (int i = 0; i < length; i++) {
        reverse[i] = user[length - i];
        rever_index++;
    }
      
    printf("reverse value are %s\n", reverse);
    return 0;
 }

测试结果:请输入您要反转的单词

细绳

反向值是 Z。如何修改我的代码?

  1. 对于 char 数组的长度,请使用 strlen(user),因为您已经指定了数组的字节数 (user[21]),并且无论您输入多少个字符,编译器总是占用 21 个字节。 也不要忘记为strlen #include <string.h>
  2. 在 for 循环中,您需要使用 user[length-1-i],因为数组的索引是从 0 到 length-1。 当您尝试访问 user[length] 时,它超出了范围。

(我试图在评论中添加这个解释,但我没有足够的声誉)

#include <stdio.h>
#include <string.h>
  
int main(void) {
    char user[21]; // created an array and let users enter letters
    char reverse[21]; // create an array and store the reverseing string
    printf("Please enter the word that you want to reverse: \n");
    scanf("%20s", user);
    int length = strlen(user);
    int rever_index = 0;

    for (int i = 0; i < length; i++) {
        reverse[i] = user[length-1-i];
        rever_index++;
    }

    reverse[length] = '\0';
    printf("reverse value are %s\n", reverse);
    return 0;
}

骗子 但是,只是为了好玩,这里有一个班轮。

/**
* Reverses a string
* @param str is the string to reverse.
* @returns a pointer to the resulting string
*/
char *rev(const char *str) {
    // get length of string
    size_t len = strlen(str);

    // allocate a string of the appropriate size
    char* r = calloc(len + 1);

    // work back down the string
    const char *s = str;
    for (; *s; ++s) 
        r[len - (s - str) - 1] = *s;

    return r;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM