题目链接:L1-032 Left-pad
目录:
题目要求:
根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用*
去填充字符串GPLT
,使之长度为10,调用left-pad的结果就应该是******GPLT
。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。
输入格式:
输入在第一行给出一个正整数N
(≤104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。
输出格式:
在一行中输出结果字符串。
输入样例1:
15 _
I love GPLT
输出样例1:
____I love GPLT
输入样例2:
4 *
this is a sample for cut
输出样例2:
cut
思路:
1.先输入n的个数、字符、字符串
2.进行判断,如果n的值小于字符串的长度,则取出字符串后n位
3.如果n的值大于字符串的长度,则先输出n-字符串的长度,然后输出字符串
注意:(1)输入完第一行输入第二行的字符串的时候要中间加一个getchar()来吸收回车字符
代码:
#include <bits/stdc++.h> // 包含几乎所有标准库的头文件,通常用于竞赛编程,但在实际项目中不推荐使用
using namespace std;
int main()
{
int n;
char c;
string s;
cin >> n >> c; // 读取整数n和字符c
getchar(); // 读取并忽略cin后的换行符,以便getline可以正确读取整行字符串
getline(cin,s); // 读取一行字符串s
if(n < s.size()) // 如果n小于s的长度
{
for(int i = s.size() - n; i <= s.size(); i ++) // 从s.size() - n开始遍历到s.size()
{
cout << s[i]; // 输出s的字符
}
}
else
{
int t = n - s.size(); // 计算需要输出的字符c的数量
for(int j = 0; j < t; j ++) // 输出t个字符c
{
cout << c;
}
for(int i = 0; i <= s.size(); i ++) // 遍历s的所有字符
{
cout << s[i]; // 输出s的字符
}
}
cout << endl; // 输出换行符
return 0; // 程序结束
}
总结
用cin输入整数和字符后要想在读取一行字符串,一定要考虑到cin后面的换行符,需要用getchar()吸收掉
cin >> n >> c; // 读取整数n和字符c
getchar(); // 读取并忽略cin后的换行符,以便getline可以正确读取整行字符串
getline(cin,s); // 读取一行字符串s
根据题目我们可以得知,本题只可能出现俩种情况,一种字符串小于所给字符。相反所给整数大于等于字符串的字符长度
if(n < s.size()) // 如果n小于s的长度
{
....
}
else
{
....
}
对于第一种情况如果所给整数n的值小于字符串长度,输出s字符串中的后n个字符
for(int i = s.size() - n; i <= s.size(); i ++) // 从s.size() - n开始遍历到s.size()
{
cout << s[i]; // 输出s的字符
}
对于另一种情况如果所给整数n的值大于等于字符串长度,输出的字符c的数量
int t = n - s.size(); // 计算需要输出的字符c的数量
for(int j = 0; j < t; j ++) // 输出t个字符c
{
cout << c;
}
然后遍历输出s的所有在字符
for(int i = 0; i <= s.size(); i ++) // 遍历s的所有字符
{
cout << s[i]; // 输出s的字符
}
测试用例:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!