ACM格式输入1

本文转载自 ACM格式输入(一) | DFSgwb

c++常用的输入输出方法

输入

1.cin

注意1:cin可以连续从键盘读入数据
注意2:cin以空格、tab、换行符作为分隔符
注意3:cin从第一个非空格字符开始读取,直到遇到分隔符结束读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 用法1,读入单数据
int num;
cin >> num;
cout << num << endl; // 输出读入的整数num

// 用法2,批量读入多个数据
vector<int> nums(5);
for(int i = 0; i < nums.size(); i++) {
cin >> nums[i];
}
// 输出读入的数组
for(int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}

2.getline()

当读取的字符串中间存在空格时,cin就不可用了,便可以使用getline()

1
2
3
4
string s;
getline(cin, s);
// 输出读入的字符串
cout << s << endl;

3.getchar

1
2
3
4
char ch;
ch = getchar();
// 输出读入的字符
cout << ch << endl;

4.scanf()

使用最多的输入方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//1.输入十进制的数 
int a;
scanf("%d",&a);
scanf("%i",&a);
scanf("%u",&a);
//这三种写法都是可以的
//2.输入八进制和十六进制数
int b;
scanf("%o",&b); //八进制
scanf("%x",&b); //十六进制
//3.输入实数
int c;
scanf("%f",&c);
scanf("%e",&c);
//这两种写法可以互换
//4.输入字符和字符串
char d;
string dd;
scanf("%c",&d); //单个字符
scanf("%s",&dd); //字符串
//5.跳过一次输入
int e;
scanf("%*",&e);
//6.输入长整型数
int f;
scanf("%ld",&f);
scanf("%lo",&f);
scanf("%lx",&f);
scanf("%l",&f);
//四种写法都可以用
//7.输入短整型数
int g;
scanf("%hd",&g);
scanf("%ho",&g);
scanf("%hx",&g);
scanf("%h",&g);
//四种写法都可以用
//8.输入double型数(小数
double h;
scanf("%lf",&h);
scanf("%lf",&h);
scanf("%l",&h);
//三种写法都可以用
//9.域宽的使用
int i;
scanf("%5d",&i);
//10.特殊占位符
int j,k;
scanf("%d,%d",&j,&k);
int j,k;
scanf("%d",&j);
printf(","); //cout<<",";
scanf("%d",&k);

输出

cout,printf随意搭配,就不讲了

下面将一些输入格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<limits.h> //INT_MIN 和 INT_MAX的头文件

using namespace std;

struct stu {
string name;
int num;
};


// 1. 直接输入一个数
int main() {
int n = 0;
while (cin >> n) {
cout << n << endl;
}
return -1;
}

// 2. 直接输入一个字符串
int main() {
string str;
while (cin >> str) {
cout << str << endl;
}
return -1;
}

// 3. 只读取一个字符
int main() {
char ch;
//方式1
while (cin >> ch) {
cout << ch << endl;
}
//方式2: cin.get(ch) 或者 ch = cin.get() 或者 cin.get()
while (cin.get(ch)) {
cout << ch << endl;
}
//方式3 :ch = getchar()
while (getchar()) {
cout << ch << endl;
}
return -1;
}


// 3.1给定一个数,表示有多少组数(可能是数字和字符串的组合),然后读取
int main() {
int n = 0;
while (cin >> n) { //每次读取1 + n 个数,即一个样例有n+1个数
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
//处理这组数/字符串
for (int i = 0; i < n; i++) {
cout << nums[i] << endl;
}
}
return -1;
}

//3.2 首先给一个数字,表示需读取n个字符,然后顺序读取n个字符
int main() {
int n = 0;
while (cin >> n) { //输入数量
vector<string> strs;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
strs.push_back(temp);
}
//处理这组字符串
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << ' ';
}
}
return 0;
}


//4.未给定数据个数,但是每一行代表一组数据,每个数据之间用空格隔开
//4.1使用getchar() 或者 cin.get() 读取判断是否是换行符,若是的话,则表示该组数(样例)结束了,需进行处理
int main() {
int ele;
while (cin >> ele) {
int sum = ele;
// getchar() //读取单个字符
/*while (cin.get() != '\n') {*/ //判断换行符号
while (getchar() != '\n') { //如果不是换行符号的话,读到的是数字后面的空格或者table
int num;
cin >> num;
sum += num;
}
cout << sum << endl;
}
return 0;
}

//4.2 给定一行字符串,每个字符串用空格间隔,一个样例为一行
int main() {
string str;
vector<string> strs;
while (cin >> str) {
strs.push_back(str);
if (getchar() == '\n') { //控制测试样例
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
cout << endl;
strs.clear();
}
}
return 0;
}


//4.3 使用getline 读取一整行数字到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
int main() {
string input;
while (getline(cin, input)) { //读取一行
stringstream data(input); //使用字符串流
int num = 0, sum = 0;
while (data >> num) {
sum += num;
}
cout << sum << endl;
}
return 0;
}


//4.4 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。
int main() {
string words;
while (getline(cin, words)) {
stringstream data(words);
vector<string> strs;
string str;
while (data >> str) {
strs.push_back(str);
}
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
}
}

//4.5 使用getline 读取一整行字符串到字符串input中,然后使用字符串流stringstream,读取单个数字或者字符。每个字符中间用','间隔
int main() {
string line;

//while (cin >> line) { //因为加了“,”所以可以看出一个字符串读取
while(getline(cin, line)){
vector<string> strs;
stringstream ss(line);
string str;
while (getline(ss, str, ',')) {
strs.push_back(str);
}
//
sort(strs.begin(), strs.end());
for (auto& str : strs) {
cout << str << " ";
}
cout << endl;
}
return 0;
}



int main() {
string str;


//C语言读取字符、数字
int a;
char c;
string s;

scanf_s("%d", &a);
scanf("%c", &c);
scanf("%s", &s);
printf("%d", a);


//读取字符
char ch;
cin >> ch;
ch = getchar();
while (cin.get(ch)) { //获得单个字符
;
}

//读取字符串
cin >> str; //遇到空白停止
getline(cin, str); //读入一行字符串

}