题目依旧很简单,只有两个小点值得注意:
(1)当需要读入一行时,需要注意回车符。如本题,前面已经读入一行,直接使用while循环读不进下一行想要得到的数据,而是直接碰到了'\n'回车符号,所以应该在前面加上getchar()先读了回车。
(2)注意段错误。在C++中,遇到段错误基本上就是访问内存错误,尤其在竞赛题中,着重观察数组越界、名称重复等问题。如本题,最后一个测试发生段错误,就是因为测试数据远超1e4,开1e4存不下,发生数组越界。
代码如下,仅供参考:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char c;
cin>>n>>c;
getchar();
char str[100005];
int k=0;
while((str[k]=getchar())!='\n'){
k++;
}
// cout<<str;
int len=k;
if(len<=n){
for(int i=1;i<=n-len;i++)cout<<c;
for(int i=0;i<k;i++)cout<<str[i];
}
else {
//string temp=str.substr(len-n,n); // 错误,str不是string
for(int i=len-n;i<=len-1;i++)cout<<str[i];
}
return 0;
}