【C语言】倒序输出
相信你是最棒哒!!!
文章目录
输入描述
正确代码
输入描述
输入包括一行。 第一行输入的字符串(含空格)。
输出描述
输出转换好的逆序字符串。
样例输入
I am a student!
样例输出
!tneduts a ma I
正确代码
注释版
#include <stdio.h>
int main()
{
char a[111]; // 定义一个字符数组a,大小为111,用于存储输入的字符串
int i; // 定义一个整型变量i,用于循环计数
gets(a); // 使用gets函数读取一行输入,包括空格,直到遇到换行符。注意:gets函数是不安全的,因为它不检查数组溢出,实际编程中应避免使用
int n = strlen(a); // 使用strlen函数计算字符串a的长度,并将其存储在变量n中
for(i = n - 1; i >= 0; i--) // 使用for循环从字符串的最后一个字符开始向前遍历
printf("%c", a[i]); // 打印当前字符a[i],由于是从后向前遍历,因此会按相反顺序打印字符串
printf("\n"); // 打印一个换行符,表示输出结束
return 0; // 返回0,表示程序正常结束
}
简洁版
#include <stdio.h>
int main()
{
char a[111];
int i;
gets(a);
int n=strlen(a);
for(i=n-1;i>=0;i--)
printf("%c",a[i]);
printf("\n");
return 0;
}
在这段代码中,for
循环从n - 1
开始而不是n
的原因是:
-
字符串的结束符:在C语言中,字符串以空字符(
'\0'
)作为结束标志。strlen
函数计算字符串长度时,会一直计数直到遇到这个空字符。因此,strlen(a)
返回的n
实际上是指字符串a
的长度,不包括结尾的空字符。 -
数组的索引:在C语言中,数组的索引是从0开始的。所以,如果
n
是字符串的长度,那么字符串的最后一个字符的索引实际上是n - 1
。数组a
的最后一个元素是a[n - 1]
。 -
循环的目的:这个
for
循环的目的是反向打印字符串。如果从n
开始,那么a[n]
实际上是越界访问,因为n
对应的是字符串末尾空字符的位置,而数组中并没有a[n]
这个元素。
综上所述,循环从n - 1
开始,是因为n - 1
是字符串最后一个字符的索引,这样可以确保循环能够正确地访问字符串中的每个字符,从最后一个字符开始向前遍历,直到索引0,即字符串的第一个字符。