定义和初始化string对象:
string s1; //默认初始化,是一个空字符串
string s2 = s1 ; //s2是s1的副本
//等价于 string s2(s1);
string s3 = "hello world !" ; //初始化为s3为后面的双引号里面的内容
//等价于 string s3("hello world !") ;
string s4(10,'s'); //初始s4的内容为10个s ssssssssss
string s5 = "hello "; //拷贝初始化
string s6("hello"); //直接初始化
string s7(10,'s'); //直接初始化
一般来使用赋值符号初始化是拷贝初始化,编译器把赋值符号右侧的初始值拷贝到新创建的对象中去。 当初始值只有一个的时候用直接或者拷贝都行,如果多个值进行初始化一般来说使用直接初始化。当然用多个值进行初始化的情况,也可以拷贝初始化。
string s8= string (10,'s'); //需要显式的创建一个临时对象用于拷贝。
//上面这个语句等价于
string temp(10,'s');
string s8=temp;
string对象的操作:
os<<s | 将s写到输出流os当中,返回os |
is>>s | 从is中读取字符串赋给s,字符串以空白分隔,返回is |
getline(is,s) | 从is中读取一行赋给s,返回is |
s.empty() | s为空返回true,否则返回false |
s.size() | 返回s中字符的个数 |
s[n] | 返回sk中第n个字符的引用,位置n从0开始 |
s1+s2 | 返回s1和s2连接后的结果 |
s1=s2 | 用s2的副本代替s1中原来的字符 |
s1==s2、s!=s2 | 如果s1和s2中的字符完全一样,则它们相等,判断对大小写敏感 |
<,<=,>,>= | 利用字符在字典中的顺序进行比较,对字母大不写敏感 |
读写string对象:
这里主要注意一下使用cin和getlin()的区别,直接看代码就知道了:
string s4;
getline(cin,s4);
cout<<s4<<endl;
string s5;
cin>>s5;
cout<<s5;
上面的程序将会输出:
hello world //使用getline()获取
hello world
hello world//使用cin获取
hello
我都输入了 hello world 输出的结果不一样。在执行读取操作的时候,string对象会自动忽略开头的空白(包括空格符、换行符、制表符等)并从第一个真正的字符开始读取,直到遇到下一个空白为止。
string对象也可以多个输入和多个输出:
string s1 , s2 ;
cin >> s1 >>s2; //把第一个输入读取到s1中, 把第二个输入读取到 s2 中
cout<< s1 << s2 <<endl;
多个输入同样受到上面的限制。size函数返回string对象的长度(就是string对象中的字符的个数),我们可以利用这个控制只输出至少多少个字符:
string line;
while ( getline(cin,line) )
{
if (line.size() >80)
{
cout<<line<<endl;
}
}
上面程序就是获取一行字符,但是只会输出字符个数大于80的。
size()函数返回的是一个string::size_type类型的值,它是一个无符号类型的值,而且能够放下任何string对象的大小。大多数标准库类型都定义了几种配套类型。在使用的时候通过作用域操作符来说明名字是类string 中定义的。
string::size_type numbers;
不过在我们使用的时候,可以用auto和decltype去推断变量的类型。
auto len = line.size();
字面值和string对象相加:
string s1 = "hello" , s2 = "world" ;
string s3 =s1 + ',' +s2 + '\n';
字面值和string对象相加的时候,必须确保每个加号的两侧的运算对象至少有一个是sting对象。
string s4 = s1 + " , " ; //正确
string s5 = "hello" + " ," ;//错误,两个运算对象都不是string
切记:字符串字面值和string是不同的类型。
处理string对象中的字符:
isalnum(c) | 当c是字母或数字时为真 |
isalpha(c) | 当c是字母时为真 |
iscntrl(c) | 当c是控制字符时为真 |
isdigit(c) | 当c是数字时为真 |
isgraph(c) | 当c不是空格但可打印时为真 |
islower(c) | 当c是小写字母时为真 |
isprint(c) | 当c是打印字符时真(就是可以看见) |
ispunct(c) | 当是标点符号时为真(不是控制字符、数字、字母、可打印空白中的一种) |
isspace(c) | 当c是空白时为真(包括空格、制表符、回车符、换行符、进制符) |
isupper(c) | 当c是大写字母时为真 |
isxdigit(c) | 当c是十六进制数字时为真 |
tolower(c) | 如果c是大写字母,输出对应的小写字母,否则输出原样c |
toupper(c) | 与上面相反 |
string s3 = "hello world !" ;
for(auto i : s3)
{
auto s4=toupper(i);
cout<<(char)s4;
}
char s5='a';
cout<<(char)toupper(s5);
HELLO WORLD !A
上面的程序就是将小写字母转换成大写字母。