簡體   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