[ACM_3] n组数据 | getchar() | getline(cin,s)
目录
14. 第⼀⾏是⼀个整数n,表示⼀共有n组测试数据, 之后输⼊n⾏ 字符串
15. 第⼀⾏是⼀个整数n,然后是n组数据,每组数据2⾏,每⾏ 为⼀个字符串,为每组数据输出⼀个字符串,每组输出占⼀⾏
16. 多组测试数据,第⼀⾏是⼀个整数n,接下来是n组字符串, 输出字符串
17. 多组测试数据,每组测试数据的第⼀⾏为整数N (1<=N<=100),当N=0时,输⼊结束,第⼆⾏为N个正整数, 以空格隔开,输出结果为字符串
示例模拟
输入1:N=5,序列 3 4 2 1 5
14. 第⼀⾏是⼀个整数n,表示⼀共有n组测试数据, 之后输⼊n⾏ 字符串
练习题 14. 句⼦缩写
模板
int n;
string result, s;
cin >> n;
getchar(); // 吸收⼀个回⻋,因为输⼊n之后,要输⼊⼀个回⻋
while (n--) {
getline(cin, s);
for (int i = 1; i < s.size() - 1; i++) {
}
正确:
#include<bits/stdc++.h>
using namespace std;
string solve(string& s)
{
if(s.empty()) return "";
string ret;
ret+=toupper(s[0]);
for(int i=1;i<s.size();i++)
{
if(s[i]==' ' && s[i+1]!=' ')
{
ret+=toupper(s[i+1]);
}
}
return ret;
}
int main()
{
int n=0;
while(cin>>n)
{
getchar();
//!!!! 清除输入缓冲区残留的换行符
string s;
while(n--)
{
getline(cin,s);
cout<<solve(s)<<endl;
}
}
return 0;
}
关于 大小写转化
15. 第⼀⾏是⼀个整数n,然后是n组数据,每组数据2⾏,每⾏ 为⼀个字符串,为每组数据输出⼀个字符串,每组输出占⼀⾏
正确
//实现 字符串 数据插入
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=0;//组
cin>>n;
getchar();
string a,b;
while(n--)
{
getline(cin,a);
getline(cin,b);
int pos=a.size()/2;
a.insert(pos,b);
cout<<a<<endl;
}
return 0;
}
- 一定要记得 get char
16. 多组测试数据,第⼀⾏是⼀个整数n,接下来是n组字符串, 输出字符串
练习题:16. 位置互换
正确·
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=0;//组
cin>>n;
getchar();
string a;
while(n--)
{
getline(cin,a);
string ret;
for(int i=0;i<a.size();i++)
{
ret+=a[i+1];
ret+=a[i];
i++;
}
cout<<ret<<endl;
}
return 0;
}
17. 多组测试数据,每组测试数据的第⼀⾏为整数N (1<=N<=100),当N=0时,输⼊结束,第⼆⾏为N个正整数, 以空格隔开,输出结果为字符串
练习题:17. 出栈合法性
- 首先 要理解 这里的栈模拟过程
示例模拟
输入1:N=5,序列 3 4 2 1 5
操作步骤 | 栈状态 | 目标指针位置 | 说明 |
入栈1 | [1] | j=0 (C[0]=3) | 栈顶1 ≠ 3,继续入栈 |
入栈2 | [1,2] | j=0 | 栈顶2 ≠ 3,继续入栈 |
入栈3 | [1,2,3] | j=0 | 栈顶3 = C[0]=3,弹出3,j=1 |
入栈4 | [1,2,4] | j=1 (C[1]=4) | 栈顶4 = C[1]=4,弹出4,j=2 |
检查栈顶2 | [1,2] | j=2 (C[2]=2) | 栈顶2 = C[2]=2,弹出2,j=3 |
检查栈顶1 | [1] | j=3 (C[3]=1) | 栈顶1 = C[3]=1,弹出1,j=4 |
入栈5 | [5] | j=4 (C[4]=5) | 栈顶5 = C[4]=5,弹出5,j=5 |
栈空 | [] | - | 合法,输出 |
正确:
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main() {
int n;
while (cin >> n && n != 0) { // 处理多组输入
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i]; // 改用动态数组
stack<int> stk;
int j = 0;
for (int i = 1; i <= n; i++) { // 按顺序入栈1~n
stk.push(i);
// 每次入栈后检查栈顶是否匹配目标序列
while (!stk.empty() && stk.top() == a[j]) { // 添加空栈判断
stk.pop();
j++;
}
}
cout << (stk.empty() && j == n ? "Yes" : "No") << endl; // 双重验证合法性
}
return 0;
}