根据新浪微博上的消息,有一位开发者不满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
首先java代码,在PAT平台未超时,全对;在PTA平台有时超时
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
char c = scanner.next().charAt(0);
// 读取回车
scanner.nextLine();
// 获取字符数组
char[] str = scanner.nextLine().toCharArray();
int i = 0, len = str.length;
// 当字符串长度大于0,就继续后面操作
while (len > 0) {
// 如果给定值大于长度
if (N > len) {
// 打印填充字符
System.out.print(c);
// 给定值减一
N--;
} else {
// 如果给定值小于字符串长度
// 则只输出给定长度的字符串
// 直到len和N一样大时,才开始输出字符
if (len <= N) {
System.out.print(str[i]);
N--;
}
// 如果 len 大于N,则索引一直往后移
i++;
len--;
}
} // while (len > 0)
} // main
}
C 代码,都未超时,全对
#include <stdio.h>
#include <string.h>
int main()
{
int N;
char c;
scanf("%d %c ", &N, &c);
char str[100000];
gets(str);
int i = 0;
int len = strlen(str); // 获取字符串长度
// 当字符串长度大于0,就继续后面操作
while (len) {
// 如果给定值大于长度
if (N > len) {
// 打印填充字符
printf("%c", c);
// 给定值减一
N--;
} else {
// 如果给定值小于字符串长度
// 则只输出给定长度的字符串
// 直到len和N一样大时,才开始输出字符
if (len <= N) {
printf("%c", str[i]);
N--;
}
// 如果 len 大于N,则索引一直往后移
i++;
len--;
}
} // while (len > 0)
return 0;
}