标题(C++输入与输出)
一、输入流
1、字符串输入:
cin使用空白(空格、制表符和换行符)来确定字符串的结束位置。字符串的输入:
#include <iostream>
using namespace std;
int main()
{
const int ArSize= 20;
char name[ArSize];
cin >> name; //输入字符串,遇到空白自动结束输入
}
结果:
输入:James Larban
输出:James
2、每次读取一行字符串:
①、面向行的输入:getline()
getline()通过回车键换行符来结束输入,采用cin.getline(array_name,char_parameter_number)
#include <iostream>
int main()
{
using namespace std;
const int ArSize = 20;
char name[ArSize];
cin.getline(name, ArSize); //输入字符串,遇到换行符或数目到达设定值,输入结束
cout << name << endl;
return 0;
}
结果:
Dirk Hammernose_Simth
Dirk Hammernose_Sim
getline()成员函数在读取函数指定数目的字符或遇到换行符时停止读取。getline()函数每次读取一行,通过换行符来确定行尾,但不保存换行符;相反,在存储字符串时,它用空字符来替换换行符。
②、面向行的输入:get()
cin.get(name,ArSize);
cin.get(dessert,ArSize); //将读取一个空行
不带任何参数cin.get()可读取下一个字符(即使是换行符)
cin.get(name,ArSize); //读取第一行
cin.get(); //读取新的一行
cin.get(name,ArSize); //读取第二行
上面可采用另一种实现方式:
cin.get(name,ArSize).get();
将把输入中连续的两行分别读入到数组name1和name2中,效果与两次调用getline()一样:cin.getline(name1,ArSize).getline(name2,ArSize);
#include <iostream>
int main()
{
using namespace std;
const int ArSize = 20;
char name[ArSize];
cin.getline(name, ArSize).get(); //读取字符串,新一行
cout << name << endl;
return 0;
}
结果:
Mjas Parfair
Simith Hadeng //两行输入,中间有换行符
Mjas Parfair
结论:getline()与get()都读取一行输入,直到到达换行符。但是,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
③、空行
get()(不是getline())读取空行后设置失效 位(接下来输入被阻断);采用cin.clear()恢复输入。
④、其他
3、混合输入字符串和数字:
如何同时输入数字和字符串:
#include <iostream>
int main()
{
using namespace std;
const int ArSize = 80;
char name[ArSize];
cout << "请输入学校建立年份:"<<endl;
int year;
cin >> year;
cin.get(); //如果没有这一句话,将会在输入行有换行符
//或者使用一个接受char参数的get();cin.get(char);
//或者也可以采用cin>>year返回一个cin对象,即为:(cin>>year).get();或者(cin>>year).get(char)
//此处必须有cin.get(); 否则在下面的输入还没有输入就已经结束输入(即输入为空)
cout << "请输入学校地址:" << endl;
char address[ArSize];
cin.getline(address, ArSize);
cout << "建校年份:" << year << "学校地址:" << address << endl;
return 0;
}
结果:
请输入学校建立年份:
1923
请输入学校地址:
辽宁省沈阳市和平区文化路三巷十一号
建校年份:1923学校地址:辽宁省沈阳市和平区文化路三巷十一号
4、多行输入字符串
string str[3];
for(int i = 0; i < 3; i++)
getline(cin,str[i]);
有些题目需要你先输入字符串的行数,然后再接着输入字符串,在采用cin>>name;后,输入行还保留着换行符 ,所有在下一次输入前将会读取此换行符,即下一个读取将会是空行,因此可以采用cin.ignore();解决此问题,解决思路与上面的(cin>>name).get(char);一样。
int N;
cin >> N;
cin.ignore(); // 取消换行的读入
string strCinLine[N];
for(int i =0; i < N;++i)
getline(cin,strCinLine[i]);
二、输出流
输出流比较简单,直接输出即可 !!!
牛客题目:
计算一系列数的和
1、输入第一行包括一个数据组数t(1 <= t <= 100),接下来每行包括两个正整数a,b(1 <= a, b <= 10^9);
输出描述:输出a+b的结果
示例1:
输入:
2
1 5
10 20
输出:
6
30
#include <iostream>
int main()
{
using namespace std;
struct Array
{
int a;
int b;
};
int num;
cin>>num;
Array A[num];
for(int i=0;i<num;i++)
{
cin>>A[i].a;
cin>>A[i].b;
}
for(int j=0;j<num;j++)
{
cout << A[j].a +A[j].b << endl;
}
return 0;
}
此处最好用vector代替struct。
2、输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入。
输入:
1 5
10 20
0 0
输出:
6
30
#include <iostream>
int main()
{
using namespace std;
int a,b;
while(cin>>a>>b)
{
if(a==0 && b==0)
break;
else
cout << a + b << endl;
}
return 0;
}
3、
输入数据包括多组。每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。接下来n个正整数,即需要求和的每个正整数。
输入:
4 1 2 3 4
5 1 2 3 4 5
0
输出:
10
15
#include <iostream>
int main()
{
using namespace std;
int a;
while(cin>>a)
{
if(a==0)
{
return 0;
}
int n;
long sum=0; //此处需要把sum初始化为0
while(a--)
{
cin >> n;
sum += n;
}
cout << sum << endl;
}
return 0;
}
4、输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。接下来t行, 每行一组数据。每行的第一个整数为整数的个数n(1 <= n <= 100)。接下来n个正整数, 即需要求和的每个正整数。
例如:
输入:
2
4 1 2 3 4
5 1 2 3 4 5
输出:
10
15
#include <iostream>
int main()
{
using namespace std;
unsigned int t;
unsigned int a,b;
long Sum=0;
cin >> t;
while(t--)
{
cin>>a;
while(a--)
{
cin >> b;
Sum += b;
}
cout << Sum << endl;
Sum = 0; //初始化
}
return 0;
}
5、输入数据有多组, 每行表示一组输入数据。每行的第一个整数为整数的个数n(1 <= n <= 100)。接下来n个正整数, 即需要求和的每个正整数。
例如:
输入:
4 1 2 3 4
5 1 2 3 4 5
输出:
10
15
#include <iostream>
#include <vector>
int main()
{
using namespace std;
vector<int> result;
int n,num;
int Sum = 0;
while(cin>>n)
{
if(n == NULL)
break;
else
{
while(n--)
{
cin>>num;
Sum += num;
}
result.push_back(Sum);
Sum = 0;
}
}
for(int i=0; i<result.size();i++)
cout << result[i] << endl;
return 0;
}
6、输入数据有多组, 每行表示一组输入数据。每行不定有n个整数,空格隔开。(1 <= n <= 100)。
例如:
输入:
1 2 3
4 5
0 0 0 0 0
输出:
6
9
0
#include <iostream>
int main()
{
using namespace std;
int n,num;
int Sum = 0;
while(cin>>n)
{
Sum = n; //将第一个数据计算到结果中
while(cin.get() != '\n')
{
cin >> num;
Sum += num;
}
cout << Sum << endl;
Sum = 0;
}
return 0;
}
字符串排序
1、输入有两行,第一行n;第二行是n个空格隔开的字符串。输出一行排序后的字符串,空格隔开,无结尾空格。
例如:
输入:
5
c d a bb e
输出:
a bb c d e
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
using namespace std;
unsigned int count;
vector<string> input;
string s;
cin>>count;
cin.ignore();
for(int i = 0; i< count;i++)
{
cin >> s;
input.push_back(s);
}
sort(input.begin(),input.end());
for(auto item: input) //遍历容器s所有元素
{
cout << item << " ";
}
cout << endl;
return 0;
}
2、多个测试用例,每个测试用例一行。每行通过空格隔开,有n个字符,n<100。(对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开)
例如:
输入:
a c bb
f dddd
nowcoder
输出:
a bb c
dddd f
nowcoder
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
using namespace std;
vector<string> input;
string s,temp;
while(cin>>s) //输入每一个数组的第一个元素
{
temp = s;
input.push_back(temp);
while( cin.get() != '\n')
{
cin>>temp; //继续读取元素
input.push_back(temp); //将元素添加到容器中
}
sort(input.begin(),input.end()); //排序
for(auto item:input) //遍历
cout << item << " ";
cout << endl;
input.clear();
}
return 0;
}
3、多个测试用例,每个测试用例一行。每行通过,隔开,有n个字符,n<100。(对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格)
例如:
输入:
a,c,bb
f,dddd
nowcoder
输出:
a,bb,c
dddd,f
nowcoder
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
using namespace std;
vector<string>input;
string str;
char c;
while(cin.get(c))
{
if(c == ',')
{
input.push_back(str);
str = "";
}
else if(c == '\n')
{
input.push_back(str);
str = "";
sort(input.begin(),input.end());
for(int i=0; i<input.size() - 1;i++) //输出到倒数第二个数
{
cout<<input[i]<<',';
}
cout<<input[input.size() - 1]<<endl;//输出最后一个数,防止最后输出','
input.clear();
}
else
str += c;
}
return 0;
}
谢谢观看 !!!