c++primer学习笔记(3.2)标准库string类型
来源:互联网 发布:北方数据 股票 编辑:程序博客网 时间:2024/04/30 09:43
3.2标准库string类型
初始化string类型的方式:
string s1; // 默认构造函数,s1为空串
string s2(s1); // 将s2初始化为s1的一个副本
string s3("value"); // 将s3初始化为一个字符串字面值副本
string s4(n, 'c'); // 将s4初始化为字符'c'的n个副本
字符串字面值与标准库string类型不是同一种类型。
String类型的输入操作符:1读取并忽略开头所有空格;
2读取字符串直至再次遇到空白字符
如:
#include <iostream>#include<string>using std::string;using std::cin;using std::cout;using std::endl; int main(){string s;cin>>s;cout<<s; return 0; }
如果输入Hello world!将只输出Hello //前后都无空格
Int s1,s2,s3;
cin>>s1>>s2>>s3;
cin返回左操作数作为结果,故可以连续读取!
读入位置数目的字符串并打印,每行输出一个单词:
#include <iostream>#include<string>using namespace std; int main(){string s;while(cin>>s)cout<<s<<endl; return 0; }
getline(cin,line),需要两个参数,一个istream,一个string对象。
一次读取一行文本
由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。
读入一行文本,打印:
#include <iostream>#include<string>using namespace std; int main(){string line;while(getline(cin,line))cout<<line<<endl; return 0; }
string对象的操作
s.empty()// 如果s为空串,则返回true,否则返回false
s.size() // 返回s中字符的个数
s[n]// 返回s中位置为n的字符,位置从0开始计数
s1+s2 //把s1和s2连接成一个新字符串
s1=s2 //把s1的内容替换为s2的内容
v1==v2 //比较v1和v2的内容,相同返回true不同false
!=,<,<=,>和>= //同上
s.size()返回的类型为string::size_type类型,这样做的目的是为了使库类型的使用与机器无关。不要把size的返回值当作int整型!!
string line1("asdf");
string line2="ghhjkl";
line1=line1+line2; //两个string相加
string line3=line1+","+line2; //也可以和字符串字面值相加,line3是asdf,ghhjkl
不过,+操作符有使用限制,两边必须有一个是string
String line4="hello"+",world" //erro 错误!!
使用s.[cnt]运算符,下标,索引index,从0开始:
#include <iostream>#include<string>using namespace std;using std::string; int main(){string line1("asdf"); string line2="ghhjkl"; line1=line1+line2; string line3=line1+","+line2; for(int cnt=0;cnt<line3.size()-1;cnt++)cout<<line3[cnt]; return 0; }
也可以进行对下标操作的直接赋值:
line3[cnt]='8';
下表操作符类型为string::size_type,但[ ]内可以使用int。
索引index千万不要超出size-1,未定义,dangerous!!
string对象中字符的处理
isalnum(c) isalpha(c) iscntrl(c) isdigit(c)
isgraph(c) islower(c) isprint(c) ispunct(c)
isspace(c) isupper(c) isxdigit(c)
tolower(c) toupper(c)
测试字符串中标点符号的个数:
#include <iostream>#include<string>using namespace std;using std::string; int main(){string s("Hello world!!!");string::size_type punct_cont=0;for(string::size_type index=0;index!=s.size();index++){if(ispunct(s[index])) ++punct_cont;}cout<<punct_cont<<" punctuation characters in "<<s<<endl; return 0; }
将字符串中的小写改成大写;
#include <iostream>#include<string>using namespace std;using std::string; int main(){string s("Hello world!!!");for(string::size_type index=0;index!=s.size();index++){s[index]=toupper(s[index]);//toupper函数仅仅是返回一个大写的字符,不会改变原有的字符值,需要赋值来改变}cout<<s<<endl; return 0; }
习题3.7
//比较string的大小#include <iostream>#include<string>using namespace std;using std::string; int main(){string s1,s2,max;cout<<"input two strings:"<<endl;cin>>s1>>s2;if(s1!=s2){ if(s1>s2){ max=s1; } else max=s2; cout<<"the bigger one is "<<max<<endl;}elsecout<<"the two strings are equal!"<<endl; return 0; }
改写程序测试长度:
#include <iostream>#include<string>using namespace std;using std::string; int main(){string s1,s2,max;cout<<"input two strings:"<<endl;cin>>s1>>s2;if(s1.size()!=s2.size()){ if(s1.size()>s2.size()){ max=s1; } else max=s2; cout<<"the longer one is "<<max<<endl;}elsecout<<"the two strings are equal!"<<endl; return 0; }
习题3.8
//连接多个string对象#include <iostream>#include<string>using namespace std;using std::string; int main(){string s,res;cout<<"please input many strings:"<<endl;while(cin>>s){res+=s;}cout<<"after putting them toghter,they are:"<<res<<endl; return 0; }
改动后,每个string之间加上空格
#include <iostream>#include<string>using namespace std;using std::string; int main(){string s,res;cout<<"please input many strings:"<<endl;while(cin>>s){res+=' '+s;}cout<<"after putting them toghter,they are:"<<res<<endl; return 0; }
习题3.10
//去除标点符号#include <iostream>#include<string>#include<cctype>using namespace std;using std::string; int main(){string s,res;cout<<"please input a string(with punctions:"<<endl;cin>>s;for(string::size_type index=0;index<s.size();index++){if(!ispunct(s[index])){res=res+s[index];}} cout<<"strip the punctions:"<<res; return 0; }
- c++primer学习笔记(3.2)标准库string类型
- c++primer学习笔记-----3.2标准库类型string
- c++primer笔记--3.2标准库类型string
- c++primer学习笔记(3.3)标准库vector类型
- c++primer学习笔记(3.5)标准库bitset类型
- C++Primer 学习笔记 第三章(标准库类型)
- c++ primer学习笔记3-标准库类型string&vector
- C++ primer阅读笔记之标准库String类型学习
- C++primer 3.2 标准库类型string(sizeof的使用)
- C++ Primer学习笔记6 标准库类型(命名空间的using声明、标准库string类型)
- linux & C++Primer 学习笔记--标准库vector类型
- 【C++Primer学习笔记】第3章 标准库类型
- c++primer学习笔记2 - 标准库类型
- C++Primer学习笔记3 标准库类型
- C++primer学习笔记-第三章标准库类型
- c++primer学习笔记-----3.3标准库类型vector
- C++ Primer 学习笔记(4)——标准库string类型
- 【C++ Primer】【学习笔记】【第三章】标准库类型之:string类型
- line-height文字居中兼容IE和火狐
- v$sql_plan看到不执行计划
- Tomcat 6.0配置数据源(DBCP)和JNDI使用
- Android不同版本功能升级汇总
- 内存映射文件
- c++primer学习笔记(3.2)标准库string类型
- linux环境下的jdk安装与环境变量配置
- SqlServer2005数据库连接问题
- ant echo message 换行等
- Solr笔记(1)_概况
- Tomcat常识
- android 控件list选中后背景变成黑色
- Rails文件上传-无插件方式
- TCP/IP协议学习笔记----2.链路层