string 表示可变长的字符序列,使用之前必须包含string头文件 include < string >;
string对象中字符的处理—–对string中对象进行处理的的函数都在cctype 头文件中定义 include < cctype>
size()函数返回string对象的长度,即string对象中字符的个数,如s1=”abc”,则个数为3,不包括末尾的空字符;(5.8节还会学到)
========================================================================================================================
前面介绍的内置类型是由C++语言直接定义的,这些类型,如数字和字符,体现了大多数计算机硬件本身具备的能力。标准库定义了另外一组具有更高级性质的类型,他们尚未直接实现到计算机硬件中。
**#include <string>**
**using std::string**
string s1; //s1默认是空串
string s2(s1);
string s2=s1;
string s3("values")**;s3是values的副本,除了字面值最后的那个空字符串外**
string s3="values";
string s4(n,'c');
int main()
{
string s1;
cin>>s1;
cout<<s1<<endl;
return 0;}
//输入 abc def
//结果:abc 因为遇到空白就停止了,所以s1=”abc“;
//ctrl + z 表示输入结束
//可以有多个输入和多个输出(常用的)
string s1,s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;
//输入 abc def
//结果:abcdef
读取未知数量的string对象和读取未知数量的int一样。
int main ()
{
string word;
while(cin>>word)
cout<<word<<endl;
return 0;
}
//输入:dec def ede
//输出:dec def ede
int main()
{
string line;
while(getline(cin,line))
cout<<line<<endl;
}
//输入 abc cde edf
//输出 abc cde edf
empty()用来判断是否为空。
size()函数返回string对象的长度,即string对象中字符的个数,如s1=”abc”,则个数为3;
对于size函数来说,其返回值类型是一个string::size_type 类型的值;
string 类型及其他大多数标准库类型都定义了几种配套的类型,这些类型体现了标准库类型与机器无关的特性,size_type 就是其中的一种。在具体使用的时候,通过作用域操作符来表明名字size_type是在类string中定义的。
size_type 是一种unsigned 类型的值,而且能够放下任何string对象的大小。
所有用于存放string类的size函数返回值的变量,都应该是string: : size_type类 型的
(注意:大小和长度不一样,长度是用size函数的,大小就直接用关系运算符进行比较)
a. 比较两个string对象通过关系运算符 > < >= == ;
b. 如果两个string对象长度不同,且较短的string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象;
c. 如果两个string对象在某些对应的位置上不一致,则string对象比较结果其实是string对象中第一对相异字符比较的结果。
两个string对象的相加其实就是string对象的串接
int main ()
{
string result_str,str;
while(cin>>str)
{result_str=result_str+str;}
cout<<result_str<<endl;
return 0;
}
//输入:abc cde efg (ctrl+z结束)
//输出:abccdeefg
字符串和string是不同的类型!!!!!!!!!!
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string。
string s2=s1+"," //可以
string s3="hello " +" , " //不可以
string s4=s2+","+"world" //可以
string s5="hello"+","+s2 // 不可以
string类型通过下标操作符来访问string对象中的字符。下标操作符也是一个size_type类型的值,这个下标中的值称为“索引”或“下标”,所以这里的索引是unsigned类型的string : : size_type;
string对象的下标都是从0开始的(所以前提就是s 非空)
如果s 是一个string对象且 s 不为空,则s[0] 就是字符串的第一个字符,s[1] 表示第二个,而s[s.size()-1]则表示最后一个。
int main () { string str("some string"); for(string::size_type ix=0;ix<str.size();ix++) {cout<<str[ix]<<endl;} return 0; } //下面这样操作是错误的,因为str1是空的!!! string str1; cout<<str1[0]<<endl;
对string中对象进行处理的的函数都在cctype 头文件中定义 include
常见的函数有 isalnum,isalpha,iscntrl,isdigit,isgraph,islower,isprint,ispunct,isspace
int main () { string str("some string!!!!!!"); string::size_type punct_cnt=0; for(string::size_type ix=0;ix<str.size();ix++) { if(ispunct(str[ix])) //这个是得到string对象中标点符号个数的函数 punct_cnt++; } cout<< punct_cnt<<endl; return 0; }
//编一个程序,从string 对象中去掉标点符号。要求输入到程序的字符串必须含
//有标点符号,输出结果则是去掉标点符号后的string 对象。
int main ()
{
string result_str,str;
while(cin>>str) //用while实现
{ for(string::size_type i=0;i!=str.size();i++)
if (!ispunct(str[i]))
result_str=result_str+str[i];
}
cout<<result_str<<endl;
return 0;
}
string result_str,str;
getline(cin,str); //用getline实现
{ for(string::size_type i=0;i!=str.size();i++)
if (!ispunct(str[i]))
result_str=result_str+str[i];
}