C++Primer阅读笔记-第3章-标准库类型string
2012-11-12 23:59 kennyMc 阅读(292) 评论(0) 收藏 举报string和vector是标准库中比较重要的2个类型。
3.1 命名空间的using声明
std::cout,::是域操作符,含义是右边操作数的名字可以在左边操作数的作用域中找到。
类似于NET中的命名空间,cout是命名空间std中定义的。
使用using声明可以字节引用名字,std::而不需要再引用该名字的命名空间。
#include <iostream> using std::cout; using std::endl; int main() { cout<<"Kenny"<<endl; system("PAUSE"); return 0; }
下面代码也是编译通过,虽然没看到书上提到,但是这样貌似是直接引用了整个命名空间。
#include <iostream> using namespace std; int main() { cout<<"Kenny"<<endl; system("PAUSE"); return 0; }
3.2 标准库string类型
string类型是支持长度可变的字符串,c++标准库负责管理和存储字符相关内存。
using std::string;
string类型的构造函数:
#include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; int main() { //默认构造函数,str1为空字符串 string str1; cout<<"默认构造函数str1值为:"<<str1<<endl; cout<<"请输入str1:"; cin>>str1; cout<<"str1的值为:"<<str1<<endl; cout<<"----------------------"<<endl; //将s2初始化为s1的副本 string str2(str1); cout<<"str2值为:"<<str2<<endl; cout<<"请输入新的str1的值:"; cin>>str1; cout<<"新的str1值为:"<<str1<<endl; //证明了str2的值是拷贝的str1的值,存储在不同的内存地址里面,而不是指针那样指向相同 的内存地址 cout<<"现在的str2值为:"<<str2<<endl; //将str3初始化为指定的字符值 string str3("Hello Kenny!"); cout<<"str3值为:"<<str3<<endl; //将str4初始化为4个's'的副本 string str4(4,'s'); cout<<"str4值为:"<<str4<<endl; system("PAUSE"); return 0; }
string对象的读写
cin读取:cin>>str1;
读取忽略开头空白字符(空格,换行符,制表符)
读取字符直到再次遇到空白字符,读取终止
下面是循环读取输入,直到按下Ctrl+z
string str;
while(cin>>str)//按下Ctrl+z发送EOF表示输入结束,后面加个回车
{
cout<<str<<endl;
}
getline读取整行文本
getline函数接受2个参数,一个输入流对象,一个string对象。
getline函数不忽略开头的换行符,即使第一个遇到的就是换行符,那么读取终止,string对象为空字符
。
string str;
while(getline(cin,str))//按下Ctrl+z发送EOF表示输入结束,后面加个回车
{
cout<<str<<endl;
}
3.2.3 string对象的操作
1.string的size和empty操作
string str;
getline(cin,str);
//size()是指string对象中的字符个数
cout<<"str是否为空:"<<(str.size()==0?"true":"false")<<endl;
cout<<"str的字符个数为:"<<str.size()<<endl;
//empty()返回bool类型
cout<<"str.empty():"<<(str.empty()?"true":"false")<<endl;
2.string::size_type类型
size_type是标准库中定义的与机器无关的配套类型,size_type是unsigned类型,不应该把size返回值
赋给一个int类型,这样在不同的机器上可能导致溢出,比如16位机器的int类型。
3.string对象的比较-跳过
4.string对象的赋值
string str="kenny";
string str1=str;
这里就算修改了str的值,str1也不会变,这里把str的值赋给str1,会先把str1占用的内存释放掉,然
后分配给str1足够存放str副本的内存空间,最后把str中的所有字符复制到新分配的内存空间。
6.字符串面值连接
这里注意下将2个字符串面值相加是非法的。
string str;
str="a"+"b";//这里就是非法的
7.从string对象获取字符
这里string对象可以用下标来获取其中的字符,下标操作符的类型是string::size_type,虽然这里也可
以用int类型来获取,但是可能由于不平台出现溢出,同时保证下标不超出作用范围。
string对象的下标从0开始,str[str.size()-1]代表最后一个字符。
string str("kenny");
for(string::size_type si=0;si<str.size();si++)
{
cout<<str[si]<<endl;
}
下标操作也可以用来赋值,str[si]='a';
3.2.4 string对象中字符的处理
这些函数定义在cctype头文件中,具体不写了
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号