C++中的string

定义和初始化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

上面的程序就是将小写字母转换成大写字母。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syhk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值