[英]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.