7-279 字符串输入输出练习

输入起始位置m、长度l及字符串s,要求输出字符串s从第m个字符开始的长度为l的子串。

输入格式:

测试数据有多组,处理到文件尾。
每组测试数据输入一行,首先是以一个空格间隔的两个整数m、l,分别表示起始位置和长度,然后在一个空格之后是一个字符串s(长度不超过80,可能包含空格)。测试数据保证取得的结果字符串至少包含一个字符。

输出格式:

对于每组测试,输出字符串s从第m个字符开始的长度为l的子串(若长度不足l,则只需输出从第m个字符开始到最后一个字符结束的子串)。每两组测试数据之间留一个空行。

输入样例:

1 2 hello world!
9 6 welcome to acm world

输出样例:

he

to acm

来源:

黄龙军, 等. 大学生程序设计竞赛入门—C/C++程序设计(微课视频版), 北京:清华大学出版社, 2020.11. ISBN:9787302564744

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

  1. 定义数组sss,大小为[80][80],用于保存输入的字符串和提取的子串。
  2. 使用变量j来记录当前已经输入的测试数据的数量,初始化为0。
  3. 使用while循环读取输入,循环条件为读取的ml都不为负数。
  4. 在循环中,使用gets()函数读取字符串,将其保存在s[j]中。
  5. 使用for循环,从索引mm+l-1,将s[j]中的字符复制到ss[j]中。
  6. ss[j]的最后添加一个空字符\0,以确保字符串的正确终止。
  7. 增加j的值,表示已经处理完一组测试数据。
  8. 循环结束后,使用for循环遍历ss数组,使用puts()函数逐行打印提取的子串

代码

#include<stdio.h>
int main()
{
    int m, l;
    char s[80][80];  // 二维数组,用于存储输入的字符串
    char ss[80][80];  // 二维数组,用于存储提取的子串
  
    int i, j = 0; 
    while(scanf("%d %d", &m, &l) != EOF && l >= 0)
    {
        gets(s[j]); 
        for(i = m; i < m + l; i++)
        {
            ss[j][i-m] = s[j][i];  // 将s[j]中的字符复制到ss[j]中,形成提取的子串
        }
        ss[j][l] = '\0';  // 在ss[j]的末尾添加一个空字符,以确保字符串的正确终止
        j++;  // 增加j的值,表示已经处理完一组测试数据
    }
    for(i = 0; i < j; i++)  // 循环遍历已处理的测试数据
    {
        puts(ss[i]);  // 使用puts()函数逐行打印提取的子串
        if(i != j - 1)
        {
            printf("\n");
        }
    }
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾乃宇宙欠债王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值