1.C++/C输入输出常用函数
两个函数:
cin
,与c 中的scanf
类似
- 特点:遇tab,space,Enter即结束输入(scanf一样)
getline
,与 c中的gets(char *s)
类似
- 特点:读入一行文本,遇到换行符结束,但是并不保存换行符;如果输入第一个字符即
\n
则输入为空字符串
- 特点:读入一行文本,遇到换行符结束,但是并不保存换行符;如果输入第一个字符即
2.输入多行char类型字符,行数不定
例子如下:
abcdfr
acdf
acv
目标: 读入一行字符串,进行处理,而后再读入下一行字符串
代码:
cout<<"实验1:使用getline函数"<<endl;
while(1)
{
string L;
while(getline(cin,L) && L.size()!=0)
{
stringoperator(L) // 对L进行处理
}
if(L.size()==0)
{
break;
}
}
cout<<"实验2:使用gets()函数"<<endl;
while(1)
{
char str[81];
while(gets(str)&&str[0]!='\0')
{
string L(str);
stringoperator(L) // 对L进行处理
}
if(str[0]=='\0')
break;
}
3.读入多行数据,行数不定,且每一行输入中包含多个字符串,以空格相间隔
输入实例:
abc acd bcdef abcdefg
abc a
def a cdf
目标:将每一行的输入按照空格提取出其中包含的字符片段,存储进vector<string> vstr
中,如上例第一行存储在vstr
中,则结果如下:
vstr[0]存储的是abc
vstr[1]存储的是acd
vstr[2]存储的是bcdef
vstr[3]存储的是abcdefg:
基本思路
- 输入行
- 按照空格对这一行数据进行切割
代码:
while(1)
{
vector<string> vstr;
string L;
getline(cin,L);
if(L.size()==0)
break;
string L1;
for(int i=0;i<L.size();++i)
{
if(L[i]!=' ')
{
L1=L1+L[i];
}
else{
vstr.push_back(L1);
L1.clear();
}
}
vstr.push_back(L1);
if(vstr.size()==0)
break;
stringVectorOperator(L) // 对这一行数据进行处理
}
4.输入多行int类型的数据,每一行元素个数未知
输入例子如下:
1 2 3 4 5
2 3 4
3 4 5 6 7
目标:将每一行出现的数字按照次序存储进vector中
基本想法:
- 先按照字符串的方法读入一行数据
- 对这一行数据进行切割,分离出其中的数字
代码如下:
while(1)
{
vector<int> vec;
string L;
getline(cin,L);
if(L.size()==0)
break;
int num=0;
for(int i=0;i<L.size();++i)// 分离出数字
{
if(L[i]!=' ')
{
num=num*10+int(L[i]-'0');
}else{
vec.push_back(num);
num=0;
}
}
vec.push_back(num);
cout<<vec.size()<<" "<<endl;
for(int i=0;i<vec.size();++i)
{
cout<<vec[i]<<endl;
}
cout<<"next"<<endl;
}