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的操作:
<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类型。例如:
<5>范围for
语法:for (declaration:expression){........}
declaration为一个变量,遍历expression中的每个元素。举个例子:
最近又倒回去看了看之前学的没记笔记的知识。
学了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
相关文章推荐
- C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)
- c++ 学习之路 第二天 string理解
- C++学习:范围for(range for)语句
- C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)
- [C++] 使用基于范围的for循环操作string
- C++学习(二) 基于范围的for循环
- C++学习笔记(八):对字符的操作函数和范围for语句的使用
- 【C++ STL学习之六】STL算法之for_each
- c++学习之路-----------dialog
- 【C++学习之路】实型(Real)
- C++学习第六天:string
- C++学习与实践(一):const引用与string类型
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
- 【C++学习笔记】基于范围的for循环(C++11)
- java学习之路 之 Java常用类-字符串(String)类及练习题
- conversion类型转换1(隐式转换)----C++学习之路
- C++学习之路(12)---类间通信之前置声明
- C++学习之路——复合类型
- 【C++】笨鸟起飞——开始我的C++学习之路
- C++学习之路 STL中栈,队列,优先队列