C++字符串的输入输出

【说明】文章主要是记录自己在阅读别人东西后的一些归纳总结,目的在于对于知识点的掌握及以后复习之用,已经标注转载!

一、cin函数

——适合单个字符的输入,遇到空格、制表符和换行符自动停止读入

——同样适合连续的不含空格、制表符和换行符的字符串的输入

#include<iostream>
using namespace std;
void main()
{
	char a[20];
	cin>>a;
	cout<<a<<endl;
}

输入:a bc   输出:a   

输入:abcd 输出:abcd            

二、字符串的输入     

(1)String类——针对字符串长度未知

#include<iostream>		//标准输入输出流头文件
#include<string>		//由于后面实例化String对象,因此这里的头文件不能少
using namespace std;

int main()
{
	string str;
	char temp;
	cout<<"输入字符串,按回车键结束输入"<<endl;
	while((temp=cin.get())!='\n')
	{
		str +=temp;
	}
	const int LEN =str.length();	//str是String的一个对象,length是成员函数
	char* dest = new char[LEN];		//根据输入字符串的长度,创建字符数组 
	for(int i = 0;i<LEN;i++)		//将字符串保存到字符数组中 
	{
		dest[i]=str[i];
		cout<<dest[i];
	}	
	cout<<endl;
	delete dest;					//此处销毁new开辟的空间不能忘记
	system("pause");
	return 0;
}

输入:I Love C++!    按回车后输出:I Love C++!

注意上述程序结束字符串输入的条件是:while((temp=cin.get())!='\n')。 如果将其改成 while((temp=cin.get())!='X'),则输入结束的条件是:X

例如输入:abcd efghjj                     则输出:abcd efghjj

                    tiandi    tongX                               tianditong

(2)cin.get函数

cin.get(str, len)——可以输入长度为len的字符串,但是只显示前len-1个字符,余下的空间用来存储空字符!!!!
#include <iostream>
using namespace std;
int main()
{
    char str[10];
    cin.get(str, 10);
    cout << str << endl;
    cout<<strlen(str)<<endl;  //如果输入10字符,只会显示9个
    return 0;
}
cin.get()——实际上用于读取单个字符。

首先看看cin.get(),它是一个读取单个字符的方法.

字符变量=cin.get();相当于cin.get(字符变量);

如果输入如下代码:

#include <iostream>
using namespace std;
void main()
{
	char astr,bstr;
	astr=cin.get();<span style="white-space:pre">	</span>//输入一个字符
	bstr=cin.get();
	cout<<astr<<bstr<<endl;
}
输入:abcd    最后输出了:ab 既然cin.get()是读取第一个字符,那bstr为什么不也是a呢? 其实原理是这样的: 在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,但事实上是cin里封装的一个东西。当我们在程序上输入字符后,对象cin获得了我们输入的字符,例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给astr,这时,cin里储存的流的数据为bcd,而cstr则获得了a.当我们再次运行bstr=cin.get();时,同理把cin里流的数据的b拿出来给了bstr,此后,cin里面的流的数据为cd,而bstr则为b,所以最后输出时,便能输出ab了。

还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据。我们再输入字母'b',按回车后便输出ab了。相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过astr=cin.get();使cin里的流没有数据,清空了。所以到第二次要再赋给bstr值时,它找不到数据,要重新再输入数据.由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值。而cin.get()还有个用法

#include <iostream>
using namespace std;
void main()
{
	char astr,bstr;
	astr=cin.get();
	cin.get();
	bstr=cin.get();
	cout<<astr<<bstr<<endl;
}
程序中有3个cin.get(),所以我们尝试输入:abc  发现输出了:ac 由此能知道,当空回调cin.get();时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用.

另外,get()将换行符保留在输入序列里,所以,再使用cin.get()输入多行数据时,中间可以使用get()消除换行符。

#include <iostream>
using namespace std;
int main()
{
	char str1[30], str2[30];
	cin.get(str1, 30);
	cin.get();
	cin.get(str2, 30);
	cout << "str1: " << str1 << endl;
	cout << "str2: " << str2 << endl;
	return 0;
}
(3)cin.getline()

——原形: getline(char *line,int size,char='结束标识符') 第一个就是字符指针,第二个是字符长度,第三个1行的结束标识符,当该参数省略时,系统默认为'\0' 

#include <iostream> 
using namespace std; 
void main () 
{ 
   char m[20]; 
   cin.getline(m,5); 
   cout<<m<<endl; 
}
输入:abcde    输出:abcd       字符串长度为4最后一个字符为'\0'
——如果要输入多行字符串,而且其中包括空格、制表符或换行时,只需要将结束标示符设定为字符串中不会出现的字符即可。
#include <iostream>
using namespace std;
void main()
{
	  char cstr[200];
	  char bstr[200];
	  cin.getline(cstr,sizeof(bstr),'[');     //我们以单个英文字母'X'作为终止标识符
	  cin.getline(bstr,sizeof(cstr),']'); 
	  cout<<"第一行是:"<<cstr<<endl;          
	  cout<<"第二行是:"<<bstr<<endl;          
	  system("pause"); 
}
输入:ab cd 输出:ab cd
            ef  gh>[ tx]     ef  gh> tx

参考文章:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值