写一个函数,可以将任意输入的字符串逆序(要可以满足多组输入)
这个题有三个点
1.要读入键盘输入的字符串,所以要用到字符串输入函数
2.可以进行多组输入
3.把输入的n组字符串都逆序
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse(char* str,int len)
{
int left = 0;
int right = len - 1;
while (left < right)
{
char tem = str[left];
str[left] = str[right];
str[right] = tem;
left++;
right--;
}
}
int main()
{
char str[1000];
while(scanf(“%s”,str)!=EOF)//可以多组输入
{
int len = strlen(str);
reverse(str, len);
printf("%s", str);
}
return 0;
}
这样可以吗?答案显然不可以
当输入字符串asd asdefg时,打印出来时dsa,这是因为scanf遇到空格就停止!
所以应该用gets
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse(char* str,int len)
{
int left = 0;
int right = len - 1;
while (left < right)
{
char tem = str[left];
str[left] = str[right];
str[right] = tem;
left++;
right--;
}
}
int main()
{
char str[1000];
while(gets(str)!=NULL)//可以进行多组输入
{
int len = strlen(str);
reverse(str, len);
printf("%s", str);
}
return 0;
}
scanf与gets
scanf
scanf的返回值是int类型,返回的是正确读入的项的个数,当scanf接收失败时,就返回EOF,这也就是第一个代码进行多组输入的限制条件
比如int ret=scanf("%s %d"arr,&b),ret就等于2(一共两项);
那如何终止多组输入呢?
while(scanf("%s",str) != EOF)
对于这段代码,我们可以多组输入字符串并进行想要的处理,当不想处理时,就要通过键入三次ctrl+z来终止代码,而不是键入EOF!!
gets
char* gets(char*str)
gets是读取一整行的字符串,存储到str所指向的空间),直到遇到换行符,所以它遇到空格也不会停止
它的返回值是字符串首字符的地址即str指针。
当读取失败或未读取时就返回NULL。
它如何终止多组输入?
只需要键入一个ctrl+z即可