【PAT乙级】1009 说反话

问题地址

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));
}

总结

  1. 对于gets和scanf的区别参考:参考一 参考二
    在自己不熟悉的情况下,别人总结的经验,可以是自己快速成长。
    对于别人总结好的,为什么不看呢??
  2. scanf() 在读取数据时需要的是数据的地址,这一点是恒定不变的,所以对于 int、char、float 等类型的变量都要在前边添加&以获取它们的地址。但是在本段代码中,我们只给出了字符串的名字,却没有在前边添加&,这是为什么呢?因为字符串名字或者数组名字在使用的过程中一般都会转换为地址,所以再添加&就是多此一举,甚至会导致错误了。
  3. 还有就是数组的地址的问题。数组名、取数组首地址的区别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值