簡體   English   中英

反轉輸入字符串

[英]Reversing an input string

我試圖捕獲用戶輸入的字符串,然后以相反的順序在初始字符串旁邊顯示該字符串。 我的代碼如下:

char str[300], revstring[300];
int i, strlen;



int main(void) {


    printf("Enter a string: ");                 //Prompt user for input string
    gets(str);

    for (i = 0; str[i] != NULL; i++) {          //Get length of string
        strlen += 1;
    }

    for (i = 0; i <= strlen; i++) {
        revstring[i] = str[strlen - i];
    }

    printf("\n\nThe palindrome of your input is %s%s\n\n\n", str, revstring);

    return 0;
}

但是,當我運行程序時,在初始字符串之后看不到任何內容。 我來自python背景,所以也許我是從python的思維定勢中考慮這個問題的,但是我覺得這應該可行。

該字符串是一個以空字符結尾的字符串。 您正在將空字符復制到反向字符串的開頭。 這告訴系統它們的字符串在第一個字符處終止。

您可以改用此代碼。

for (i = 0; i < strlen; i++)
{
    revstring[i] = str[(strlen - 1) - i];
}
revstring[strlen] = 0;

在這里,僅復制空字符之前的字符,然后在末尾添加空字符。

在此循環之后

for (i = 0; str[i] != NULL; i++) {          //Get length of string
    strlen += 1;
}

str[strlen]等於終止零'\\0' i等於0時,下一個循環從在數組revstring的第一個元素中寫入零開始。

for (i = 0; i <= strlen; i++) {
    revstring[i] = str[strlen - i];
}

結果什么也沒顯示。

同樣,您也不要忘記在結果字符串后附加零。

考慮到該函數gets是不安全的,並且C標准不再支持該函數。 最好使用標准函數fgets 但是使用它應該刪除附加的換行符。

該程序可以寫成

#include <stdio.h>

#define N   300

int main( void ) 
{
    char str[N], revstring[N];

    printf( "Enter a string: " );

    fgets( str, N, stdin );

    size_t  length = 0;
    while ( str[length] != '\0' && str[length] != '\n' ) ++length;

    if ( str[length] == '\n' ) str[length] = '\0';

    size_t i = 0;
    for ( ; i != length; i++ ) revstring[i] = str[length - i - 1];

    revstring[i] = '\0';

    printf("\n\nThe palindrome of your input is %s%s\n\n\n", str, revstring);

    return 0;
}

它的輸出可能看起來像

Enter a string: Hello, Froobyflake

The palindrome of your input is Hello, FroobyflakeekalfyboorF ,olleH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM