写一个函数,可以将任意输入的字符串逆序(要可以满足多组输入)
这个题有三个点
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即可