C++ Primer小记 第三章 字符串、向量和数组

第三章 字符串、向量和数组

3.1 命名空间的using声明

​ 这种方式可以只声明std中的cin,即不需要包含整个std命名空间

using std :: cin;

​ 这种方式是把std整个命名空间都包含进去

using namespace std;

​ 注意在头文件中,不应该包含using声明。因为头文件的内容会被拷贝到每一个引用他的文件中,那么using声明也会被拷贝过去,这样可能会不经意间产生错误。

3.2 标准库类型string

3.2.1 定义和初始化 string 对象

void initString(){
	string s1;				//string类默认初始化为空串
	 
	//下面这行代码还可以写成 string s2(s1); 
	string s2 = s1;			//s2是s1的拷贝 
	
	//下面这行代码还可以写成 string s3("hello"); 
	string s3 = "hello";	//注意,这里是把hello拷贝到s3中,字面值的'\0'并不拷贝	 
	
	string s4(10,'w');		//s4的值是10个w,这里的初始化方法就是初始化num个c 
	
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
}
直接初始化和拷贝初始化

​ 如果用等号初始化一个变量,实际上执行的是拷贝初始化。

string s5 = "hello";		//拷贝初始化
string s6("hello");			//直接初始化

3.2.2 string对象上的操作

//本例书上代码但是暂时不知道is是什么输入流 
//'is' was not declared in this scope 
//从is中读取字符串赋给s,返回is 
is >> s;
//把s写入输出流os中,返回os
os << s; 

注意利用cin进行读入的时候,开头的空白会被自动忽略。而读入的时候,遇到空白也会停止

​ 例如读入的是 ***" Hello World "***,输出的是 ***“Hello”***。

void methods_1(){
	string s,s1,s2;
    //从cin中获取一行赋值给s,返回cin。下面会提到这种方式和cin直接读取的不同
	getline(cin,s); 
	if(!s.empty()){					//为空返回true,否则返回false
		cout << s << endl; 
		cout << s.size() << endl;	//返回s中字符的个数
		cout << s[0] << endl;		//返回s中第n个字符的引用,注意是引用,意味着可以这样来实现修改 
	}
	
	cin >> s1;
	if(!s1.empty()){
		cout << s + s1 << endl;		//返回s和s1连接后的结果
		s2 = s;						//理由s的副本来改变s2的值
		if(s2 == s){				//判断两个字符串是否相等,不等判断使用 != 
			cout << "s2 equal s" << endl;
		} 
	}
	
	if(s > s1){						//字符串的比较是基于ASCII,一个字符一个字符比较的 
		cout << "s > s1" << endl;
	} else if(s >= s2){
		cout << "s >= s2" << endl;
	}
}

​ ***如果想保留输入时的空格,用getline()***。

getline() 遇到换行符的时候结束当前读入。注意换行符也被读进来了。但是把读到的内容存到string对象时,并不存换行符。

//getline函数和cin不同,cin遇到空白就停,getline读取一行,直到遇到换行符 
void method_getline(){
	string line;
	int count = 0; 
	while(getline(cin,line)){
		count++;
		cout << line << endl;
		if(count >= 2)
		break;
	}
	cout << "下面是用cin输入,比较差别" << endl;
	while(cin >> line){
		cout << line << endl;
	}
}
string :: size_type

​ 这里有个要注意的点,string::size_type是一个***无符号类型***的值。定义这样的类型主要是为了体现标准库类型与机器无关的特性。

​ 当进行如下比较的时候,可能会产生错误,但是这又是我们非常容易忽略的。


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值