L1-032 Left-pad
输入格式:
输入在第一行给出一个正整数N
(≤104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。
输出格式:
在一行中输出结果字符串。
输入样例1:
15 _ I love GPLT
输出样例1:
____I love GPLT
输入样例2:
4 * this is a sample for cut
输出样例2:
cut
#include<stdio.h> // 引入标准输入输出库 #include<string.h> // 引入字符串处理库,提供strlen函数等 int main() { char a[100000], b; // 定义字符数组a用于存储原始字符串,字符b用于存储填充字符 int n, i; // 定义整数n表示目标字符串的长度,i为循环计数器 // 读取输入 scanf("%d %c", &n, &b); // 读取目标长度n和填充字符b getchar(); // 读取并丢弃输入中的换行符,避免影响下一次输入 scanf("%[^\n]", a); // 读取原始字符串a(直到遇到换行符为止) // 如果原始字符串长度大于目标长度 if (strlen(a) > n) { // 从原始字符串的末尾截取最后n个字符并输出 for (i = strlen(a) - n; i < strlen(a); i++) printf("%c", a[i]); // 输出从原始字符串中截取的部分 } else { // 如果原始字符串的长度小于目标长度 // 先输出填充字符b,直到达到目标长度 for (i = 0; i < n - strlen(a); i++) printf("%c", b); // 输出填充字符b // 然后输出原始字符串a for (i = 0; i < strlen(a); i++) printf("%c", a[i]); // 输出原始字符串a的内容 } return 0; // 程序结束 }
scanf("%[^\n]", a)
是 C 语言中的一种输入格式化方式,用于读取一行文本(包括空格),直到遇到换行符 \n
为止。
解释:
%[^\n]
:这个格式化控制符的作用是读取所有字符,直到遇到指定的字符(在这个例子中是换行符\n
)为止。- [ 表示开始读取一个字符集。
- ^ 表示排除符号,意思是“读取所有字符,直到遇到下一个指定的字符(此处是换行符 \n)为止”。
- \n 是换行符,它表示结束读取的标志。
因此,scanf("%[^\n]", a);
会读取用户输入的一整行文本(包括空格),直到遇到换行符,并将这些字符存储到字符数组 a
中。
为什么使用 getchar()
:
在这段代码中,getchar()
被用来读取并丢弃输入中的换行符。原因是 scanf("%d %c", &n, &b);
读取完 n
和 b
后会停留在输入缓冲区的换行符上,而 scanf("%[^\n]", a);
会直接从换行符开始读取,导致没有输入内容被读入。使用 getchar()
读取并丢弃这个换行符,可以确保后续的 scanf("%[^\n]", a);
能够正常读取用户输入的整行文本。
总结:
%[^\n]
用于读取一整行文本,直到遇到换行符。getchar()
是为了丢弃输入缓冲区中的换行符,确保后续的输入操作不受影响。