L1-032 Left-pad

题目 L1-032 Left-pad

image-a8ed05b3

思路分析

输入

getline
用法:getline(cin, stringVar);
目的:读取一整行文本,直到遇到换行符`\n`。`getline`会丢弃换行符,但会读取并保留行中的其他所有字符,**包括空格**。
场景:当你需要读取包含空格的一行文本或者确保一次读取直到行末尾时,`getline`是最佳选择。
注意:在getline之前使用cin或scanf读取其他数据,并且期望紧接着用getline读取下一行时,需要注意消耗掉留在输入缓冲区中的换行符
cin>>n;
getline(cin,s);
for(int i=0;i<n;i++){
    getline(cin,s);
    m[i]=s.size();
    for(int j=0;j<m[i];j++){
        if(isalpha(s[j])){
            g[i][j]=1;
        }
        else{
            g[i][j]=0;
        }
    }
}

代码实现

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'

#define int long long

using ll = long long;

using ull = unsigned long long;

using PII = pair<int,int>;

using Pll = pair<ll,ll>;

int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};

const int inf = 0x3f3f3f3f;

signed main()

{

	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

	//如果满足长度n 截取原串中的最后n位

	//如果不满足长度n ?是否可以简单判断需要补几位 输出几个tag 再输出原串

	int n;char tag;cin>>n>>tag;

	string os;//包含空格 需使用getline读一整行

	getline(cin,os);//需要把缓冲区的换行读掉才能正常读入

	getline(cin,os);//真正读入原串

//	cout<<n<<endl<<tag<<endl<<os<<endl<<os.size()<<endl;

	if(os.size()<n){

		int need=n-os.size();

		while(need--){

			cout<<tag;

		}

		cout<<os;

	}

	 //从size-n位置 截取n长度的子串

	if(os.size()>=n){

		int idx=os.size()-n;

		string ans=os.substr(idx,n);

		cout<<ans;

	}

	return 0;

}

同类题型

视频讲解


⬅️ L1-031 到底是不是太胖了 🏠 00-天梯赛 ➡️ L1-033 出生年