反转输入字符串
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 的心态,但我觉得这应该可行。
该字符串是以 null 结尾的字符串。您正在将空字符复制到反转字符串的开头。这告诉系统他们的字符串在第一个字符处终止。
您可以改用此代码。
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]
等于终止零 '[=15=]'
。当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] != '[=12=]' && str[length] != '\n' ) ++length;
if ( str[length] == '\n' ) str[length] = '[=12=]';
size_t i = 0;
for ( ; i != length; i++ ) revstring[i] = str[length - i - 1];
revstring[i] = '[=12=]';
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
我正在尝试捕获用户输入的字符串,然后在初始字符串旁边以相反的顺序显示该字符串。我的代码如下:
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 的心态,但我觉得这应该可行。
该字符串是以 null 结尾的字符串。您正在将空字符复制到反转字符串的开头。这告诉系统他们的字符串在第一个字符处终止。
您可以改用此代码。
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]
等于终止零 '[=15=]'
。当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] != '[=12=]' && str[length] != '\n' ) ++length;
if ( str[length] == '\n' ) str[length] = '[=12=]';
size_t i = 0;
for ( ; i != length; i++ ) revstring[i] = str[length - i - 1];
revstring[i] = '[=12=]';
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