信息学奥赛一本通 2047:【例5.16】过滤空格 | OpenJudge NOI 1.7 23:过滤多余的空格_一本通2047-程序员宅基地

技术标签: c++  信息学奥赛一本通题解  OpenJudge NOI题解  

【题目链接】

ybt 2047:【例5.16】过滤空格
OpenJudge NOI 1.7 23:过滤多余的空格

【题目考点】

1. 字符数组
2. string类
3. 计数
4. 输入不确定数量的字符串
string s;
while(cin >> s)
{
    
    //...
}

char s[105];
while(scanf("%s", s) != EOF))
{
    
    //...
}

OJ上实际是从文件输入,文件末尾是EOF(end of file,实际是-1)。当读到文件末尾时cin >> s会返回false,scanf("%s", s)会返回EOF,让循环跳出。
这样的程序在本地调试时,输入n个数据后不会停止。此时可以按Ctrl+Z,控制台中出现^Z后,按回车,这样可以结束输入,看到程序运行的结果。

【题解代码】

解法1:遍历字符串的同时构造新的字符串,最后输出
  • 使用字符数组
#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    char s_in[205], s_out[205];
    cin.getline(s_in, 205);
    int len = strlen(s_in), bn = 0, si = 0;//bn:空格数量计数 
    for(int i = 0; i <= len; ++i)//遍历到'\0'位置 
    {
    
        if(s_in[i] == ' ')
        {
    
            bn++;//空格数量计数加1 
            if(bn == 1)
                s_out[si++] = s_in[i];//将s_in[i]填充到s_out中 
        }
        else
        {
    
            s_out[si++] = s_in[i];
            bn = 0;
        }
    }
    cout << s_out;
    return 0;
}
  • 使用string类
    用到了string类的成员函数push_back,将一个字符添加到字符串末尾
#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    string s_in, s_out;
    getline(cin, s_in);
    int bn = 0;//bn:空格数量计数 
    for(int i = 0; i < s_in.length(); ++i) 
    {
    
        if(s_in[i] == ' ')
        {
    
            bn++;//空格数量计数加1 
            if(bn == 1)
                s_out.push_back(s_in[i]);//将s_in[i]添加到s_out末尾
        }
        else
        {
    
            s_out.push_back(s_in[i]);
            bn = 0;
        }
    }
    cout << s_out;
    return 0;
}
解法2:遍历字符数组,遇到多余的空格不输出,遇到其它字符输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    char s[205];
    cin.getline(s, 205);
    int len = strlen(s), bn = 0;
    for(int i = 0; i < len; ++i)
    {
    
        if(s[i] == ' ')
            bn++;
        else
            bn = 0;
        if(s[i] != ' ' || bn == 1)
            cout << s[i];
    }
    return 0;
}
解法3:读入不确定数量的字符串
  • 使用string
#include<bits/stdc++.h>
using namespace std;
int main()
{
    
	string s;
	while(cin >> s)
		cout << s << ' ';
	return 0;
}
  • 使用scanf
#include<bits/stdc++.h>
using namespace std;
int main()
{
    
	char s[205];
	while(scanf("%s", s) != EOF)
		printf("%s ", s);
	return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lq1990717/article/details/122375442

智能推荐

拳皇世界6月13服务器维护,拳皇世界2月8日例行维护 数据互通公告[图]-程序员宅基地

文章浏览阅读250次。为了给广大格斗家们创造更加稳定的游戏体验,我们将在2月8日8:00-11:00对游戏进行例行维护,并对部分区服进行数据互通操作。请各位玩家相互转告,并提前留意维护时间,以免造成不必要的损失。更新后格斗家可以获得100钻石的例行维护补偿,维护期间给您带来的不便,敬请谅解,感谢所有玩家的支持和配合。具体更新内容如下:【维护时间】2018年2月8日8:00—11:00,预计维护3个小时(开服时间可能提前...

第九届中国大学生计算机比赛,电子音乐系学生作品在2020年中国大学生计算机设计大赛中获奖...-程序员宅基地

文章浏览阅读500次。“2020年(第13届)中国大学生计算机设计大赛”自2020年6月开赛以来,经过初选、决赛初评与复评,大赛圆满落下帷幕。本届大赛分设了包括软件应用与开发、数媒动漫与微电影、计算机音乐创作等14大类(组)与计算机相关的设计比赛,全国共有近700所院校组织了约3万件作品参加大赛。经过全国各省级赛区的选拔推荐,共有4646件作品入围国赛。在山东大学和厦门大学承办赛务的支持下,全国约400多名评审专家以线..._《太阳纪》李铄仪(电子音乐系2018级本科生),

echarts柱状图x轴文字显示不全_axisline 最后的显示不全-程序员宅基地

文章浏览阅读484次。var option = { xAxis: { data: [ ], axisLine: { lineStyle: { color: "#3d5269", }, }, axisLabel: { color: "#fff", fontSize: 12, interval: 0, //横轴信息全部显示 rotate: -30, //-30度角倾斜显_axisline 最后的显示不全

流量变现:推广渠道 + 货源_流量变现及推广-程序员宅基地

文章浏览阅读833次。推广渠道:抖音 + QQ群 + 带货 + 广告、西瓜视频 + QQ群 + 带货 + 广告、B站 + QQ群 + 带货 + 广告、公众号订阅号 + 微信群 + 带货 + 广告、CSDN + 微信群、直播 + QQ群 + 带货 + 广告货源:掘金(电子图书)、出版社(实体图书)、CSDN(技术文章)..._流量变现及推广

No1.Windows10系统优化设置注册表项_win10注册表优化-程序员宅基地

文章浏览阅读1.4k次。Windows10.22H2.19045.2193 系统优化相关设置,全部为注册表项,提供一键导入文件。_win10注册表优化

腾讯移动推送又双叕优化Android 6.0推送啦!-程序员宅基地

文章浏览阅读171次。腾讯移动推送(以下简称:信鸽)作为业内标杆的第三方推送服务商,一直坚持为开发者提供贴心服务、助力开发者高效运营、解决开发者运营难题的原则。近日,它再次全新升级Android SDK,以更强大的功能和性能继续免费向移动开发者提供推送服务。更新亮点本次SDK升级的亮点有:业界独创双Service保活,既能保证消息稳定到达,又能保证省电省流量,提高到达率,提升点击效果转化;针对Android 6.0 系..._腾讯的android推送

随便推点

AD账号及Exchange 邮箱的误删除恢复-程序员宅基地

文章浏览阅读407次。在一个使用Microsoft Server的企业中,DNS是根本,AD应该就是基础,而Exchange是最常见的应用了。这些都是企业业务的保证,所以为了保证这些最基础和最重要的,很多企业都是花了不少心思。最起码的是做了ntbackup,大型的企业可能要上SAN、磁盘阵列、磁带机等等了。那么如果我们真的不小心删除了一个用户,想要尽快的恢复此用户,该怎么办呢?也许给为想到的就是赶..._ldp ntdsutil exchange isdeleted

12 STM32F429 SysTick timer_stm32f429 指令周期-程序员宅基地

文章浏览阅读79次。stm32 SysTick timer_stm32f429 指令周期

PMP_yuruizai110-程序员宅基地

文章浏览阅读4k次,点赞26次,收藏54次。首先很激动,LK6月份参加的PMP考试通过了,两个多月的学习终于有了一个圆满的结果。LK还是很高兴的,因为这个考试费真的是太贵了。补考费也是相当贵。先来了解一下PMP是什么。 干啥的 PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 ..._yuruizai110

谢谢兄弟连给我这个学习的机会-程序员宅基地

文章浏览阅读49次。首先先自我介绍下吧,我是第34期的学员王瑞新,我毕业于一个普通的中等职业技术学校.以前干过好多工作,当时的第一份工作是在电脑城维修电脑,对于第一份工作我的最大的感受就是挣争好难,因为大家都知道维修计算机的人员工资并不高.我的第二份工作就是工地,相对来说工地的工资还算是可以的,但是太累也不是我想要的.来到兄弟两周的我也算对兄弟连有个了解了,我感觉兄弟连这个模式还算不错的,上课老师讲的课基本..._php王瑞新

Jquery-设置拖拽控制面板结合日历插件_jq日程日历拖拽-程序员宅基地

文章浏览阅读204次。Jquery-设置拖拽控制面板_jq日程日历拖拽

IP101A芯片默认物理地址(PHY Adress)确定-程序员宅基地

文章浏览阅读301次。转载:http://blog.csdn.net/ropai/article/details/6961157 根据IP101A的DataSheet,芯片的第9,10,12,13,15脚为PHYAD0~PHYAD4。(其实为PHYAD和LED共用管脚)。这个PHYAD是可配的,有两种方法可以确定PHY Address.(1)通过硬件方法利用芯片上电或复位后latch的电平高低来确定,比..._ip101a应用电路