关于C++输入输出格式、以及其他容易忘记的知识的整合。
首先是题目:
输入一串大写字母串(包括空格),输出的Sum是每个英文字母在字母表中的位置及字符串的位置的乘积之和(空格为0)。
举例:
ACM: 1*1 + 2*3 + 3*13 = 46
MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3+ 6*5 + 7*14 + 8*20 + 9*18 + 10*1 + 11*12 = 650
输入输出格式:
(一块以‘#’结束的字母串块及一块结果输出块)
#include<iostream>
using namespace std;
int main()
{
char a[256];//255会报错,若输入255个字符容易溢出
int count, i, re[256], j = 0;//re为存放结果的数组
cin.getline(a,256);//读入键盘输入(包括空格)
while(a[0]!= '#')//判结束标志
{
i = 0;count = 0;
while(a[i] != 0)//0是此字母串结束标志
{
if(a[i] == ' ') i++;
else
{
count = count + (i+1) * (a[i] - 64);
i++;
}
}
re[j] = count;
j ++;
cin.getline(a,256);
}
for(i = 0; i< j; i++)
cout<<re[i]<<endl;
return 0;
}
一、输入输出格式(cin、getline、get的对比)
1. cin:不读入TAB、空格、回车。
原理:cin用空格回车确定字符串的界。当读到空格回车时,自动添加结束标志并清空缓冲池,同时丢弃缓冲区令输入结束的结束符。
2. getline:读一行数据。
原理:当遇到回车时才添加字符串结束标志,同时丢弃缓冲区的回车。当输入超长时,不会执行剩下的输入,出现错误。
用法:cin.getline(数组名,数组长度,结束符)。
3. get:读一行数据。
原理:同getline大体类似,当输入字符时不丢弃缓冲区的enter,输入字符串时丢弃enter,可是不丢弃结束符。当超长时,不会发生输入错误,把超出部分放在缓冲区中。
用法:cin.get(数组名,数组长度,结束符)。
参考资料:
关于缓冲区详解
C++ 读取键盘输入(cin/cin.getline()/cin.get()/cin.clear())
基于C++ cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解
二、ACM错误提示
Compiling 代码正在后台编译
Restricted Function 代码中使用了不安全的函数
Compilation Error 代码编译错误,可以点击查看编译错误细节
Running 程序运行中
Time Limit Exceeded 程序超过了题目的时间限制
Memory Limit Exceeded 程序超过了题目的内存限制
Runtime Error:SIGFPE 程序运行时错误:浮点数异常
Runtime Error:SIGSEGV 程序运行时错误:段错误
Presentation Error 程序正确,但是输出格式有错误
Accepted 程序正确,题目已经正确解答
Wrong Answer 程序不正确