您的位置:首页 > 编程语言 > C语言/C++

string的皮毛与范围for----C++学习之路

2017-10-17 15:01 344 查看
/*以下是自己学习的心得与笔记,书籍《C++prime》平日会学习的书籍有《数据库系统导论》《计算机组成原理》《计算机系统导论》*/

最近又倒回去看了看之前学的没记笔记的知识。

学了string的皮毛以及范围for。

大部分我们用到的库函数都属于命名空间std,所以要了解关于命名空间的using声明。 我的理解是,举个例子,假如我们要使用cout与cin,

就算添加了库文件,不添加using声明,我们使用cout<<什么什么<<endl;这样编译器会报错,因为我们使用的名字不够完整,完整的名字为:

std::cout<<什么什么<<std::endl;这样的话,为了不这么繁琐,我们可以使用using声明,using std::cout;using std::endl;或者直接把整个std包含

进来,using namespace std; 这里注意:头文件不应该包含using声明。因为,头文件是要包含在别的文件去的,别的文件也许会声明using什么,

这样就会弄混。

string十个标准库类型,其中的学问很大,百度之后,就于拷贝赋值与直接赋值都有学问,因为我的愚笨,我就先记下一些皮毛的笔记。

<1>string的操作:

os<<s 
is<<s        输入输出 
getline(is,s)    从is中读取一行给s 
s.empty()          判断s是否为空字符串
s.size()           返回s的字符串长度,类型为size_type
s
下标方法,返回一个字符
s1 + s2字符串相加
s1 = s2    字符串赋值
s1 == s2        字符串比较,返回bool
s1 != s2       同上
<, <= , >, >= 利用字符在字典的顺序进行比较,对大小写敏感


<2>size_type

它是一个无符号类型,所有存放string的size函数返回值的变量,都是string::size_type类型,举个例子:加入n是一个具有负值的int,表达式s.size()<n的判断,结果几乎肯定是true,这是因为负值n会自动地转换成一个较大的无符号数。所以根据我自己的理解,在应用string或者其他会返回size_type,应该说可能会返回,尽量应用auto与decltype来定义这个类型,例如decltype(s.size()) c=0; 后面的笔记还会有例子。

<3>string相加

注意一个就是:C++中大部分的运算方式都是从左边到右边,string相加必须确保每个加法运算的两侧的运算至少要一个是string类型。例如:

string s4 =s1+","; 正确
string s5 = "hello" + "world"; 错误
string s6 = s1 + "," + "world"; 这里就是上面提到的,从左向右,可以堪称(s1+",")+"world";括号里相加还是string类型
string s7 = “hello" + "," +s1; 错误,道理如上
<4>string字符处理:

isalnum(c) 当c是字母或者数字的时候为真
isalpha(c) 当c是字母时候为真
iscntrl(c) 当c为控制字符时为真
isdigit(c) 当c为数字的时候为真
isgraph(c) 当c不是空格但是可以打印的时候为真
islower(c) 当c为小写的时候为真
isprint(c) 当c可以打印时候为真
ispunct(c) 当c为符号时候为真
isspace(c) 当c为空格时候为真
isupper(c) 当c为大写的时候为真
isxdigit(c) 当c为十六位进制数字时候为真
tolower(c) 当c为大写时候输出小写,当c为小写,输出本身。
toupper(c) 当c为小写时候输出大写,当c为大写输出本身。
例子:当输入abCD我要输出都为小写。这里可以while以及for配合下标或者迭代器,或者范围for,第五点就是范围for的概念。

<5>范围for

语法:for (declaration:expression){........}

declaration为一个变量,遍历expression中的每个元素。举个例子:

string s1 = "word";
for ( const auto c : s1)
{
cout<<c<<endl;
}得到结果就是
w
o
r
d
这就是范围for,《Effective C++》书里说尽量使用const,那么当我们要通过范围for来修改s1中的东西时候,应该使用引用。

string s2 = "world";
for ( auto &c : s2)
{
c=X;
}
结果会等于:
XXXXX
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: