zoukankan      html  css  js  c++  java
  • 填充游戏

    Description

    在字符串前填充一些东西到一定的长度。例如用“*”去填充字符串“GPLT”,使之长度为10,结果就应该是“******GPLT”。

    Input

    多组测试数据,第一行给出一个正整数N(<=104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。

    Output

    输出结果字符串。

    Sample Input

    6 2 33333 6 * 33333 4 * this is a sample for cut

    Sample Output

    233333 *33333 cut

    HINT

    注意一下输入的字符串是以回车为结束标志的,也就是说可能有空格,要小心。

    很基础的一道算法题

    是最开始因为没有考虑到getline时 输入流中有/n 导致getline到一行空行 程序无法ac

    此外 还要考虑 要求的长度 比输入字符串短的情况 即只输出前n个字符

    实际上你在每次输入数据的时候会输入一个回车 ‘ '

    cin在读入整数时候会忽略空白碰到非数字(' ')时停止 

    cin在getline时会把' '及之前的内容读回来,哪怕是空行也会读入

    cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)

    cin.ignore(1000, ' ')的含义是把缓冲区内从当前字符开始知道' '之前字符(如果有1000个的话)忽略掉,实际上你这里假设一行不会超过1000个字符,所以含义是忽略一行

    例如

    如果你想输入a=1,b=2 name="xxxx", c='y'
    所以你的输入是
    1回车2回车xxxx回车y回车
    cin读入a=1 碰到回车停止 此时1后面的回车还在缓冲区里
    cin读b=2时忽略2前面的回车但是停止在2后面的回车
    此时你如果掉getline 就会读入一个2后面回车前面的也就是空行 因此此时应当调用一个cin.ignore(1000,' ')把这个 忽略掉

    代码中注释部分为错误代码

    #include<iostream>
    //#include <stdio.h>
    #include<climits>
    using namespace std;
    int main()
    {
        int len;
        char ch;
        while(cin>>len>>ch)
        {
            
            cin.ignore();
            string str;
            getline(cin,str);
            if(len==str.length())
                cout<<str<<endl;
            else if(len>str.length())
            {
                while(len>str.length())
                {
                    str=ch+str;
                }
                cout<<str<<endl;
            }
            else
            {
                for(int i=str.length()-len;i<str.length() ;i++)
                    cout<<str[i];
                cout<<endl;
            }
            
        }
        return 0;
    }
    
    /*#include<iostream>
    using namespace std;
    int main()
    {
        int n;
        char c;
        char s[100];
        while(cin>>n>>c)
        {
            cin.ignore();
            cin.getline(s,100);
            //cout<<s<<endl;
            int len=strlen(s);
            if(n>len)
            {
                for(int i=1;i<=n-len;i++)
                    cout<<c;
                cout<<s<<endl;
            }
            else if(n==len)
            {
                cout<<s<<endl;
            }
            else
            {
                cout<<"cut"<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    最大子数组问题:股票
    dfs小练 【dfs】
    java小知识点简单回顾
    cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】
    二路归并排序算法
    优秀Python学习资源收集汇总(强烈推荐)
    怎么学习逆向工程?
    __cdecl 、__fastcall、__stdcall
    getchar()、putchar()、gets()、puts()、cin.get()、cin.getline()、getline()
    <cctype>库
  • 原文地址:https://www.cnblogs.com/cbhhh/p/6014031.html
Copyright © 2011-2022 走看看