在c++中,对于普通常用的cin,对于包含空格的字符串显得有些无力感,
读入缓冲区中的字符是不会包含空格的,
对于想要包含空格的字符串,可以使用getline()函数;
getline 从输入流读取字符并将它们放进 string :
以下是getline()的用法:
getline(input, str, input.widen(’\n’)) ,即默认分隔符是换行符。
input - 获取数据来源的流
str - 放置数据的目标 string
delim - 分隔字符(默认为换行符,即上面函数中的第三个参数)
但是使用getline()只能读入一行字符
如下:
#include<iostream>
#include<bits/stdc++.h>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
string s[n];
for(int i=0;i<n;i++)
{
getline(cin,s[i]);
}
for(int i=0;i<n;i++)
{
cout<<s[i]<<endl;
}
return 0;
}
这段代码,读入的字符串比输入的行数会少一行,因为输入的n后,会有一个换行符停留在缓冲区中,getline()会自动读入上面输入的数字n遗留下来的\n(即读入了一个空行),相当于多读入了一行字符串,下面的循环也会相应的执行一次
要想实现多行输入,可以使用cin.ignore()来除掉上面的cin>>n输入时缓冲区中包含的\n即可
如下:
#include<iostream>
#include<bits/stdc++.h>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
cin.ignore();
string s[n];
for(int i=0;i<n;i++)
{
getline(cin,s[i]);
}
for(int i=0;i<n;i++)
{
cout<<s[i]<<endl;
}
return 0;
}