填充游戏
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个字符
实际上你在每次输入数据的时候会输入一个回车 ‘\n'
cin在读入整数时候会忽略空白碰到非数字('\n')时停止
cin在getline时会把'\n'及之前的内容读回来,哪怕是空行也会读入
cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)
cin.ignore(1000, '\n')的含义是把缓冲区内从当前字符开始知道'\n'之前字符(如果有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,'\n')把这个\n忽略掉
代码中注释部分为错误代码
#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; }