C++函数

读整数

scanf 读到文件结束的时候返回-1,也就是EOF,判断可用 while(scanf(...) != EOF)。1的补码表示恰好是全1,从而用按位取反得到0,判断也可用 while(~scanf(...))

cin 读到有数据输入时会返回非0,而读到文件结束符时会返回0。

读单个字符

ch = cin.get(); or cin.get(ch);.

ch = getchar();

读一个字符串

string str; cin >> str;

char a[20]; cin.get(a, 20);

char str[20]; scanf("%s", str);

读一行字符串(包含空格)

string line; getline(cin, line);

自定义结束符:string line; getline(cin, line, '?');

输入整数

每组个数确定

不确定组数

https://ac.nowcoder.com/acm/contest/5652/A

int a, b;
while (scanf("%d%d", &a, &b) != EOF) {
  printf("%d\n", a + b);
}

Or

int a, b;
while (cin >> a >> b) {
  cout << a + b << endl;
}

确定组数

https://ac.nowcoder.com/acm/contest/5652/B

int n, a, b;
scanf("%d", &n);
while (n--) {
  scanf("%d%d", &a, &b);
  printf("%d\n", a + b);
}

Or

int n, a, b;
cin >> n;
while (cin >> a >> b) {
  cout << a + b << endl;
}

结束标志

https://ac.nowcoder.com/acm/contest/5652/C

int a, b;
while(cin>>a>>b){
  if(a==0 && b==0) continue;
  cout << a+b << endl;
}

Or

int a, b;
while(scanf("%d%d",&a,&b)) {
  if (a==0 && b==0) break;
  printf("%d\n", a+b);
}

每组个数不定

结束标志

https://ac.nowcoder.com/acm/contest/5652/D

int n;
while(cin >> n && n != 0) {
  int tmp, sum = 0;
  while(n--) {
    cin >> tmp;
    sum += tmp;
  }
  cout << sum << endl;
}

Or

int n;
while (scanf("%d", &n) && n) {
  int sum = 0, val;
  while (n--) {
    scanf("%d", &val);
    sum += val;
  }
  printf("%d\n", sum);
}

EOF结束

https://ac.nowcoder.com/acm/contest/5652/F

int n;
while (cin >> n) {
  int sum = 0;
  while (n--) {
    int c;
    cin >> c;
    sum += c;
  }
  cout << sum << endl;
}

每组个数不定

https://ac.nowcoder.com/acm/contest/5652/G

int in = 0, sum = 0;
while(cin >> in){
  sum += in;
  if(cin.get() == '\n'){
    cout << sum << endl;
    sum = 0;
  }
}

Or

int n,sum=0;
while(scanf("%d",&n)!=EOF){
  sum += n;
  if(getchar()=='\n'){
    printf("%d\n",sum);
    sum=0;
  }
}

输入字符串

每组个数确定

https://ac.nowcoder.com/acm/contest/5652/H

int n;
cin >> n;
vector<string> v(n);
while(n--)
  cin >> v[n];
sort(v.begin(), v.end());
for (int i = 0; i < v.size() - 1; i++)
  cout << v[i] << " ";
cout << v.back() << endl;

每组个数不定

https://ac.nowcoder.com/acm/contest/5652/I

string s;
while(getline(cin, s)){
  istringstream iss(s);
  vector<string> strs;
  string lits;
  while(iss >> lits){
    strs.push_back(lits);
  }
  sort(strs.begin(), strs.end());
  for(int i = 0; i < strs.size() - 1; i++){
    cout << strs[i] << " ";  
  }
  cout << strs.back() << endl;
}

https://ac.nowcoder.com/acm/contest/5652/J

string s;
while(getline(cin, s)){
  istringstream iss(s);
  vector<string> strs;
  string lits;
  while(getline(iss, lits, ',')){
    strs.push_back(lits);
  }
  sort(strs.begin(), strs.end());
  for(int i = 0; i < strs.size() - 1; i++){
    cout << strs[i] << ",";  
  }
  cout << strs.back() << endl;
}

输出

保留小数位数

printf("%3.0f",floatNum):不保留小数

说明:%3.0f表明待打印的浮点数(floatNum)至少占3个字符宽,且不带小数点和小数部分,整数部分至少占3个位宽;

注意:这里的3只代表整数部分至少占3位,舍弃小数点和小数点后面的部分

printf("%6.2f".floatNum):保留两位小数

说明:%6.2f 表明待打印的数(floatNum)至少占6个字符宽度(包括两位小数和一个小数点),且小数点后面有2位小数,小数点占一位,所以整数部分至少占3位。

注意:这里的6是待打印的数至少占据的字符宽度,包括两位小数(如果小数不够两位用0补位,例如100.1打印出来为100.10)和一个小数点,所以整数部分至少占3个字符宽度。

printf("%.3f\n", a);:如保留 3 位小数,此种方法会自动的四舍五入。

float a = 2.7; printf("%d\n", int(a+0.5));:一位小数四舍五入成整数。

参考

https://ac.nowcoder.com/acm/contest/5652

https://github.com/sdutacm/ACM-IO

https://blog.csdn.net/abcdu1/article/details/75090369

最后修改:2022 年 03 月 22 日
如果觉得我的文章对你有用,请随意赞赏