利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。 要求如下: (1)在子函数Inverse中实现字符串的逆序存放。函数原型为: void Inverse(char str[]); (2)在主函数中 从键盘输入字符串(使用gets函数) 然后,调用Inverse函数, 最后,输出逆序后的字符串。 (3)**输入提示信息:"Input a string:\n" **输出提示信息:"Inversed results:\n" **输出格式:"%s\n" 程序运行示例: Input a string: qwertyu Inversed results: uytrewq
这道题的解答如下:
//字符串逆序函数:
void Inverse(char str[])
{
int len = 0, i, j;
char temp;
len = strlen(str);
str[len - 1] = '\0';//减掉末尾的\n(如果是和fgets配套使用的话要加,和scanf使用配套使用时不用)
len = strlen(str);
j = len - 1;
for (i = 0; i < j; i++, j--)//交换数据
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
int main()
{
char str[80];
printf("Input a string:\n");
//scanf("%s", str);
fgets(str, 80, stdin);
printf("Inversed results:\n");
Inverse(str);
puts(str);
return 0;
}
这道题目不难解,有一个重要的点是区分scanf和fgets,注意我注释中写到的.其中 str[len - 1] = '\0';//减掉末尾的\n(如果是和fgets配套使用的话要加,和scanf使用配套使用时不用)的意思是,如果用scanf读取数据的时候将这句话注释掉,不然会缺少数据,具体大家可以试试,发生这种情况的主要原因是scanf和fgets读取数据的差别:
注意第二点!给大家看看如果用scanf而且带有str[len - 1] = '\0';结果会怎么样:
再看看注释掉之后:
倘若用fgets的时候将str[len - 1] = '\0';注释掉会发生下面的情况: