输入多组字符串 方法getline()与vector

来源:互联网 发布:java绝对路径 编辑:程序博客网 时间:2024/04/30 09:07

方法一:

利用getline()函数

getline函数对空白符的处理:不忽略空白符,即把空白符也当成元素存储到string对象中,读取字符一直到换行符(回车),读取终止且丢弃换行符(换行符从输入流中丢去且不保存在string对象中)

cin函数对空白符的处理:读取并忽略非空白符之前所有的空白字符,直到再次遇到空白符,读取终止(该空白符仍留在输入流中)


这里是每次输入时对象都是string对象。也即是输入一组就要去操作一组(要回车代表重新输入到输入流中)

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{

        // operate
            cout<<str.size();
}

return 0;
}

------------

转:

分析:注意这里默认回车符停止读入,按Ctrl+Z或键入EOF回车即可退出循环。
在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,
注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。在这种情况下,我想只要你的电脑不中毒不发神经你的输入流怎么会没有效?所以这种情况下不管你怎么输入都跳不出循环,因为你的输入流有效,跳不出循环。
然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数,此时str中已经清空

方法二:

利用vector 

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{   string str;
int n;
cin>>n;
vector<string> vec;

for (int i=0;i!=n;i++)
{   cin>>str;
vec.push_back(str);
}
for (int j=0;j!=n;j++)
{
reverse(vec[j].begin(),vec[j].end()); //vec[i]在string中是该字符串的对象,也是首地址
}
    for (int j=0;j!=n;j++)
{

               cout<<&vec[j]<<endl;  //元素首地址的地址
cout<<vec[j]<<endl;
cout<<*(vec[j])<<endl;   //出错,不能取得第一个元素
        cout<<vec[j][0]<<endl; //相当于str[i] 数组的某一个元素

          }
system("pause");
return 0;
}


0 0
原创粉丝点击