0
点赞
收藏
分享

微信扫一扫

信息学奥赛一本通 2047:【例5.16】过滤空格

静鸡鸡的JC 2022-01-08 阅读 153
c++

【题目链接】

ybt 2047:【例5.16】过滤空格

【题目考点】

1. 字符数组

2. string类

3. 计数

【题解代码】

解法1:遍历字符串的同时构造新的字符串,最后输出

  • 使用字符数组
#include<bits/stdc++.h>
using namespace std;
int main()
{
    char s_in[205], s_out[205], si = 0;
    cin.getline(s_in, 205);
    int len = strlen(s_in), bn = 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;
}
举报

相关推荐

0 条评论