基础的前文已备,不再赘述。
这里举两类特别的题。
1.矩阵题
输入
第一行为正整数n
第二行开始的n行,连续n个字符,代表不同的意义,无间隔字符!
Python
n=int(input())
data=[input().split("") for _ in range(n)]
C++
int n; cin>>n;
char data[n][n];
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>data[n][n];
也可以
int n; cin>>n;
char data[n][n];
for(int i=0;i<n;i++) cin >> data[i];
特别地,如果需要保留围墙,从下标1开始接收数据
for (int i=1;i<=n;i++) cin >> data[i]+sizeof(char);
2. 无尾行
尾无终止符,单行不知数
比如 洛谷 P2415 集合求和
Python
data=input().split()
C++
传统的c用scanf
int s[30],cnt = 0;
while (scanf("%d", &s[cnt])==1 && cnt<30) cnt++;
或者用cin
int s[30],tmp,cnt = 0;
while(cin>>tmp){s[cnt++]=tmp;}
还可以自己写个分割函数,解决特殊间隔字符的情况
int splt(int d[],string ss,char sep,int nmax){
//自己写个split()
int cnt=0;string s="";
for(int i=0;i<ss.size()&&cnt<nmax;i++){
if(ss[i]==sep){
if(s!=""){d[cnt++]=stoi(s);s="";}
}else s+=ss[i];
}
if(s!="")d[cnt++]=stoi(s);
return cnt;
}
int s[30];
string ss; getline(cin,ss);
int cnt=splt(s,ss,' ',30);
小结
一句话两种做法:类型匹配挨个读,整行读入自己分。