目录
一、题目:
将一个字符串str的内容颠倒过来并输出,数据范围:1<=len(str)<=10000 。
输入描述:输入一个字符串,可以有空格。
输出描述:输出逆序的字符串。
二、解析:
(1)、
char arr[100] = { 0 };
//遇到空格时停止
scanf("%s", &arr);
(2)、
char arr[100] = { 0 };
gets(arr);
gets()函数只有一个参数,参数类型为 char* 型,即 str 可以是一个字符指针变量名,也可以是一个字符数组名。gets() 函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以直接输入,不用像 scanf 那样要定义多个字符数组。它的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
(3)、
char arr[100] = { 0 };
scanf("%[^\n]", &arr);
与gets()函数作用差不多,在题目中遇到空格时不会停止。
三、代码:
#include<stdio.h>
int main()
{
char arr[100] = { 0 };
// 1.
//scanf("%s", &arr); //遇到空格时停止
// 2.
//scanf("%[^\n]", &arr);
// 3.
gets(arr);
int len = strlen(arr);
int left = 0;
int right = len - 1;
while (left < right)
{
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
注:
当使用 gets() 函数时,编译器会自动将最后的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会留下换行符。因此如果前面使用过 gets()函数,而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。但是如果前面使用的不是 gets() 而是 scanf来接受字符,那么通过赋值前就必须先使用 getchar() 清空缓冲区。