今天在刷一个牛客题目时候遇到了一个问题
函数主体相比不是很难写;但是这个输入并且判断就出现了很大的问题,字符串出现空格怎么办比如:I am a student 中间的空格很麻烦
void ReversePrint(char* string)
{
if (*string != '\0')
{
string = string + 1;
ReversePrint(string);
printf("%c", *(string - 1));
}
}
函数已经实现好了;通过递归
下面列举三种方法供大家参考:
1:fgets();
int main() {
char str[100];
printf("Enter a string: \n");
// 法一
fgets(str, 100, stdin); //123\n 假如我输入123‘回车’
printf("lenght = %d\n", strlen(str));
str[strlen(str) - 1] = 0; //去掉末尾‘回车’
printf("lenght = %d\n", strlen(str));
printf("You entered: %s\n", str);
ReversePrint(str);
return 0;
}
第一个方案好处是,第三个参数一改就可以修改文件了
2:gets();
int main() {
char str[100];
printf("Enter a string: \n");
// 法二
gets(str); //123
printf("You entered: %s\n", str);
ReversePrint(str);
return 0;
}
第二个方案就是直接简单化,不考虑\n
3:scanf("%[^ \n]", );
int main() {
char str[100];
printf("Enter a string: \n");
// 法三
scanf("%[^\n]",str); //输入当我遇到 \n 停止接收,后面即使有内容也不去操作
//scanf("%[^0123456789]",str); //输入当我遇到 数字 停止接收,后面即使有内容也不去操作
printf("You entered: %s\n", str);
ReversePrint(str);
return 0;
}
第三个方案就是随便设置以什么结束,按照题目就是\n,当然如果我输入内容遇到数字也会停止;后面你再输入任何东西都跟我无关;所以scanf("%[^(判断读取中止的内容) ]",str)是非常灵活的。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void ReversePrint(char* string)
{
if (*string != '\0')
{
string = string + 1;
ReversePrint(string);
printf("%c", *(string - 1));
}
}
int main() {
char str[100];
printf("Enter a string: \n");
// 法一
//fgets(str, 100, stdin); 123\n
//printf("lenght = %d\n",strlen(str));
//str[strlen(str)-1] = 0; //去掉末尾
//printf("lenght = %d\n", strlen(str));
// 法二
//gets(str);123
// 法三
//scanf("%[^\n]",str); //输入当我遇到 \n 停止接收,后面即使有内容也不去操作
//scanf("%[^0123456789]",str); //输入当我遇到 数字 停止接收,后面即使有内容也不去操作
printf("You entered: %s\n", str);
ReversePrint(str);
return 0;
}