问题地址
https://pintia.cn/problem-sets/994805260223102976/problems/994805314941992960
解题方法
首先要定义一个字符串,先创建一个数字,长度最少80;
读取字符串可以用scanf和gets。因为scanf只读取到空格,所以用gets。
根据printf()
和数组s[i]
的含义,只打印s[i]
到\0
的内容。所以我们可以倒着for循环。直到遇见" "
。
//
// Created by 76147 on 2019/10/4.
//
#include <stdio.h>
#include <strings.h>
int main() {
int i;
char s[80];
gets(s);
for (i = strlen(s) - 1; i >= 0; i--) {
if (s[i] == ' ') {
printf("%s ", &s[i + 1]);
s[i] = '\0';
}
if (i == 0) {
printf("%s", &s[i]);
}
}
// char s[] = "hello\0";
// printf("%d",strlen(s));
}
总结
- 对于gets和scanf的区别参考:参考一 参考二
在自己不熟悉的情况下,别人总结的经验,可以是自己快速成长。
对于别人总结好的,为什么不看呢?? - scanf() 在读取数据时需要的是数据的地址,这一点是恒定不变的,所以对于 int、char、float 等类型的变量都要在前边添加&以获取它们的地址。但是在本段代码中,我们只给出了字符串的名字,却没有在前边添加&,这是为什么呢?因为字符串名字或者数组名字在使用的过程中一般都会转换为地址,所以再添加&就是多此一举,甚至会导致错误了。
- 还有就是数组的地址的问题。数组名、取数组首地址的区别