首页 > 代码库 > 标准库类型String

标准库类型String

 

string对象中每个字符的处理:

要用到 for(声明:表达式) 语句

比如简单的打印string str中每一个字符

---

string str("hello world!!!");

for(auto c: str)cout<<c<<endl;  

(ps:这里auto 的意思是让编译器自己来决定c变量的类型)

---

再举一个例子统计string str的标点符号数目

string str("hello world!!!");

decltype(str.szie()) num_cnt = 0;

for(auto c : s)

  if(ispunct(c)) ++num_cnt;

cout<<num_cnt<<" punctuation characters in "<<s<<endl;

(ps:这里decltype(str.size()) 是代表的str.size()声明类型,而str.size()的类型不是整型,而是一个无符号的其他类型。

然后使用 ispunct(char c)是包含在头文件cctype里面的。cctype 头文件里面有许多 isalnum判断是否数字,isalpha判断是否字母..etc)

----

 那假如希望改变string str的字符呢?而不是仅仅进行统计和输出

这个例子是将str的全部变成大写字母!

string str("hello world!!!");

for(auto &c : str) c=toupper(c)

cout<<str<<endl;

(ps: 这里有个小变化for(auto c:str) 变成 for(auto &c:str)! 原来str 的每个字符 是复制给 auto c。所以即使你改变了auto c

也并没有改变str的每个字符!但是auto &c 没有,这里c是代表str 每个字符的引用而非副本。也就是c 是每个字符的另一个别名而已!

所以改变c 确实能够改变str 的字符!)

 

标准库类型String