指针编程题:7-1 单词翻转(输入一个句子,将句子中的每一个单词翻转后输出)7-2 输出月份(定义指针数组将下面的月份信息...)7-3 解密英文藏头诗(本题要求编写一个解密英文藏头诗的程序)

7-1 单词翻转

问题描述

输入一个句子(一行),将句子中的每一个单词翻转后输出。

输入描述

只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。

输出描述

翻转每一个单词后的字符串,单词之间的空格需与原文一致。

样例输入

hello world

样例输出

olleh dlrow

样例输入

li   hai   la      wo   de      guo

样例输出

il   iah   al      ow   ed      oug

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


解题代码

#include<stdio.h>
#include<string.h>
void Reverse(char*);
int main() {
    char s[501];
    gets(s);
    Reverse(s);
    puts(s);
    return 0;
}
void Reverse(char* s) {
    char* p = s;
    char* q;
    char temp;
    while (*p != 0) {
        while (*p != ' ' && *p != 0)
            p++;
        q = p - 1;
        while (s < q) {
            temp = *s;
            *s = *q;
            *q = temp;
            s++;
            q--;
        }
        while (*p == ' ')
            p++;
        s = p;
    }
}

解题思路

就说下重要的几个变量:char temp  char* s  char*q

我们就拿 “hello world” 进行举例。

char* s 是输入字符串的首地址,一开始的值是“h”。

char*q 一开始指向“o”。

char temp 是将s与q的值进行互换。

第一轮,则是“o e l l h”。

第二轮是“o l l e h”,同时完成第一个单词的换序。

之后s++,q--,即两端同时进行互换,直到这两个相等。因此while的前提条件就很可以看懂了。

 while (s < q)

注意,三个while循环不是同时发生,而是按照顺序:

第一个while循环遍历字符串s,直到遇到空格或者字符串结束符为止;

第二个while循环将指针q指向当前单词的最后一个字符,然后将指针s指向当前单词的第一个字符,交换两个指针所指向的字符,直到s和q相遇为止;

第三个while循环跳过空格,指向下一个单词的第一个字符。


7-2 输出月份

定义指针数组将下面的月份信息保存下来,输入n个数字,对每个数字,在表中查找对应的月份,若存在则输出该数字对应的月份,否则输出“no find”。
Jan. 一月
Feb. 二月
Mar. 三月
Apr. 四月
May.五月
Jun. 六月
Jul. 七月
Aug. 八月
Sep. 九月
Oct. 十月
Nov.十一月
Dec. 十二月

输入格式:

第一行输入n,其后n个数字。

输出格式:

输出每个数字对应的月份,若不存在,则输出“no find”。

输入样例:

4
1
3
5
13

输出样例:

Jan.
Mar.
May.
no find

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


解题代码

#include<stdio.h>
int main() {
    char* months[12] = { "Jan.","Feb.","Mar.",
        "Apr.","May.","Jun.","Jul.","Aug.",
        "Sep.","Oct.","Nov.","Dec."
    };
    int n, x;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &x);
        if (x >= 0 && x < 12) {
            printf("%s\n", months[x - 1]);
        }
        else printf("no find\n");
        }
return 0;
}

解题思路

建立一个字符型数组指针 char* months[12] , 这样可以有效替代二维数组,挺方便的。   之后就是通过数组下标减一,得出想要的输出。这道题并不难。


7-3 解密英文藏头诗

本题要求编写一个解密英文藏头诗的程序。建议使用动态内存分配方法处理字符串的输入。

输入格式:

输入为一首英文藏头诗,每句一行,小于20行,每行不超过80个字符,以#作为藏头诗的输入结束标志。

输出格式:

取出每句的第一个字符,连接在一起形成一个字符串并输出。

输入样例:

I come into a dream
Leaves fall down but spring
over a lake birds flying
village have its nice morning
everywhere can feel happiness
Years have never been
owners don't need anything
until the sun bring another wind
#

输出样例:

ILoveYou

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB                                 


解题代码 

#include<stdio.h>
#include<string.h>
int main() {
    char poem[20][81] = { 0 };
    int i;
    for (i = 0; i < 20; i++) {
        gets(poem[i]);
        if (strcmp(poem[i], "#") == 0)
            break;
    }
    char string[100]={0};
    for (int j = 0; j < i; j++) {
        string[j] = poem[j][0];
    }
    puts(string);
    return 0;
}

               


解题思路

这段代码定义了一个二维字符数组poem,用于存储输入的藏头诗。然后,它使用一个for循环遍历每一行输入,将其存储到poem数组中。当输入的行为#时,循环结束。

    char string[100]={0};
    for (int j = 0; j < i; j++) {
        string[j] = poem[j][0];
    }
    puts(string);
    return 0;
}

整个代码的意义:定义了一个字符数组string,用于存储每个单词的首字母。然后,它使用一个for循环遍历poem数组中的每一行,将每行的第一个字符存储到string数组中。最后,它使用puts函数输出string数组。


现在是2024年,1月2日,星期二,热带风味冰红茶。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Louis Maos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值