Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377996
  • 博文数量: 57
  • 博客积分: 4020
  • 博客等级: 上校
  • 技术积分: 647
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-17 15:57
文章分类

全部博文(57)

文章存档

2009年(22)

2008年(35)

我的朋友

分类: C/C++

2008-11-04 23:59:28

C++数据类型——C-串与string(2)
Author: yuexingtian
Date: 2008-10-30 Thursday
1.string与C-串的输入输出(string & C-string I/O)
   通过循环读入单词操作将内容送到变量中,直到读不到数据(缓冲区读完,并且没有数据连接,
则流状态变成false)例:
【string】
#include
#include
using namespace std;
int main()
{
  for(string s;cin>>s;) //循环语句(你输入什么敲回车就会出来什么)
    cout<    cout<
    return 0;
}
  或者:
【字符数组】
#include
//#include
using namespace std;
int main()
{
  for(char a[10];cin>>a;)
    cout<    cout<
    return 0;
}
  cina>>的读入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,
将单词读入,当遇到空格时结束本次输入。
  也可以通过getline将其一次性的输入:
string
#include
#include
using namespace std;
int main()
{
  string s;
  getline(cin,s);
  cout<
  return 0;
}
或者:【字符数组】
#include
#include
using namespace std;
int main()
{
  char a[20];
  cin.getline(a,20);
  cout<
  return 0;
}
  两者使用getline格式上有差异。getline总是将行末的回车符滤掉。
在本次的输入中没有什么影响,但是若有许多行,且行中还夹杂着其他类型的数据时,
借助于getline然后再逐个分解行中各数据是简明的,了解这一点很重要!
  如果是逐个字符输入,那应如何呢:
#include
#include
using namespace std;
int main()
{
 for(char ch;(ch=cin.get())!='\n';)
 cout< cout<
  return 0;
}
  要注意的是:字符指针或字符数组操作是陈旧的,用它和string两种操作的方式举例是为了便比较边,学习string。
 
2.string流(string Streams)
  如果有一个文件yuexingtian.txt,有若干行,但不知道每行中含有几个整数,要编程输出每行的整数和,
怎么办?
  由于cin>>不能辨别空格和回车的差异,因此只能用getline的方式逐行读入数据到string变量中,
但在string变量中分离若干个整数还是显得有点吃力。
  一个好的方法是用string流:
//==============yuexingtian-->begin=================
#include
#include 
#include
using namespace std;
//--------------------------------
int main()
{
   ifstream in("yuexingtian.txt");
   for(string s;getline(in,s);)
     /*
       getline(in,s)为从输入文件流中读入一行数据,放入string变量s中.
       由于整行地读入,读入到s中时,文件中的每个换行符都丢掉了.
         */ 
      {
      	int a,sum=0;
      	for(istringstream sin(s);sin>>a;sum += a);
        /*istringstream对象可以绑定一行字符串,
         然后以空格为分隔符把该行分隔开来*/ 
      	cout<//===========http://yuexingtian.cublog.cn============

yuexingtian.txt文件内容为:
运行结果:

  istringstream是输入string流,它在sstream头文件中说明。该语句类似流操作,只不过创建sin流时,
其参数为string对象。它将string的实体看作是一个输入流,因而,sin>>a即是从string流中输入整数到a中,
输啊输,一直输到string中的最后一个整数!
  string流很有用,有时候要将内容先逐个输出到string中,最后才根据计算结果来安排输出格式。
  getline函数的返回是流状态,通过它可以判断文件是否还有数据行可读。
 
 
 
阅读(2045) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~