cprime笔记(编辑修改稿)内容摘要:
const_iterator begin() const。 iterator begin()。 const_iterator end() const。 iterator end()。 插入字符串 成员函数 insert 实现在某点处插入字符串。 简化函数原型如下: stringamp。 insert(size_type p0, const char *s)。 stringamp。 insert(size_type p0, const char *s, size_type n)。 stringamp。 insert(size_type p0, const stringamp。 str)。 stringamp。 insert(size_type p0, const stringamp。 str, size_type pos, size_type n)。 stringamp。 insert(size_type p0, size_type n, char c)。 iterator insert(iterator it, char c)。 void insert(iterator it, const_iterator first, const_iterator last)。 void insert(iterator it, size_type n, char c)。 注意: insert 函数是在插入点 (p0 or it)之前插入字符串。 删除子串 成员函数 erase 实现删除某个子串。 简化函数原型如下: iterator erase(iterator first, iterator last)。 iterator erase(iterator it)。 stringamp。 erase(size_type p0 = 0, size_type n = npos)。 如果指定删除的字符个数比字符串中从指定位置开始的剩余字符个数还多,那么只有这些字符被删除。 查找子串 查找子串有六种方式,分别有五类成员函数与之应。 find 查找控制字符序列中与操作字符序列匹配的第一个子串,并返回子串的起始位置; rfind 查找控制字符序列中与操作字符序列匹配的最后一个子串,并返回该子串的起始位置,相当于逆向查找; find_first_of 查找控制字符序列中第一个出现在操作字符序列中的字符的位置,并返回该位置; find_first_not_of 查找控制字符序列中第一个不出现在操作字符序列中的字符的位置,并返回该位置; find_last_of 查找控制字符序列中最后一个出 现在操作序列中的字符的位置,并返回该位置; find_last_not_of 查找控制字符序列中最后一个不出现在操作字符序列中的字符位置,并返回该位置; 如果这些函数查找失败,则返回 string::npos。 其中, find 函数的简化函数原型如下: size_type find(char c, size_type pos = 0) const。 size_type find(const char *s, size_type pos = 0) const。 size_type find(const char *s, size_type pos, size_type n) const。 size_type find(const stringamp。 str, size_type pos = 0) const。 另外的五个函数的函数原型和 find 的函数原型类型类似,区别在于,如果是是逆序查找的函数 (rfind, find_last_of, find_last_not_of),则 pos 参数默认值为 npos。 其它成员函数和友元函数 size_type capacity() const。 // 返回当前字符串的 存储空间大小 = size() void reserve(size_type n = 0)。 // 保证 capacity()=n bool empty() const。 // 若字符串为空,返回 true size_type size() const。 // 返回字符串长 size_type length() const。 // 等于 size() size_type max_size() const。 //返回 string 类中字符串的最大长度 void resize(size_type n, char c = 39。 39。 )。 //若长度不够,则用 c 填充加长的部分;保证 size()返回 n void swap(stringamp。 str)。 //两 string 对象交换,能在常数时间内完成(必须是使用相同 allocator 的两对象,这里都使用的默认的) // 其它非成员函数 istreamamp。 getline(istreamamp。 is, stringamp。 str)。 istreamamp。 getline(istreamamp。 is, stringamp。 str, char delim)。 ostreamamp。 operator(ostreamamp。 os, const stringamp。 str)。 istreamamp。 operator(istreamamp。 is, const stringamp。 str)。 其中, istreamamp。 getline(istreamamp。 is, stringamp。 str)。 相当于 istreamamp。 getline(istreamamp。 is, stringamp。 str, char delim = 39。 \n39。 )。 getline 函数在下列三种情况下结束提取: 1)遇到文件结束符; 2)遇到分隔符 delim。 如果第一个就是分隔符, str 为空串(并且该分隔符被从流中读出丢弃),但 istream 测试为真; 3)如果已经提取了 ()个字符,那么提取结束,并且将调用 (ios_base::failbit),即此时返回的 istream 测试为假。 如果函数没有提取到字符(包括分隔符),那么将调用 (failbit),此时测试 istream 为假。 默认情况下 , istreamamp。 operator(istreamamp。 is, const stringamp。 str)。 在下 列三种情况下结束提取: 1)遇到文件结束符; 2)遇到空白字符(空格、 Tab、换行); 3)如果已经提取了 ()个字符,或者提取了 ()(非 0 情况下)个字符。 如果没有提取到任何非文件结束符的字符(包括空白字符),那么将调用 (failbit),此时测试 istream为假。 例如,看看下面的循环: while(cin word) { cout word read is: word 39。 \n39。 } 要中止上面的循环应该用文件结束符: Win——Ctrl+Z Unix——Ctrl+D 并且,应该是输入行的第一个字符就是文件结束符,然后回车才能结束循环。 应用举例 替换 string 对象中所有子串 在上面 string 类的成员函数中,没有替换 string 对象中所有子串的方法。 我们可以利用 find 和 replace 这 两个成员函数来实现该目标,代码如下: stringamp。 replaceAll(stringamp。 context, const stringamp。 from, const stringamp。 to) { // replace all substring 39。 from39。 with substring 39。 to39。 in string context string::size_type curPos = 0。 string::size_type foundPos = 0。 while ((foundPos = (from, curPos)) != string::npos) { (foundPos, (), to)。 curPos = foundPos + ()。 } return context。 } 除了上面这个通用方法,对于特殊的需求,我们还可以有更简单的方法。 如果我们只需要用一个字符替换 string 对象中的另一个字符,则可以用标准库提供的模板类算 法 replace 实现该目标,其原型如下: templatecaass FwdIt, class T void replace(FwdIt first, FwdIt last, const Tamp。 vold, const Tamp。 vnew)。 把该算法应用 string 对象,可以这样使用: replace((), (), 39。 F39。 , 39。 T39。 )。 这样就可以把 string 对象 s 中所有的 F 字符替换为 T 字符。 提取网页文件中的 Email地址 如果要抓取互联 网上的 Email地址(如 WebSpider),需要提取抓取到的网页文件里的 URL 和 Email地址。 假如这里需要提取 Email地址,那么可以利用 string 类方便的进行提取工作。 下面提供了一个实现该功能的源码示例(从我的一个程序里截取出来的): void RetrieveEmailFromPage(const stringamp。 page, const stringamp。 url) { int posCur = 0, posStart, posAt, posEnd, posTmp。 string。 string tags = ._ abcdefg hijklmn opqrst uvwxyz ABCDEFG HIJKLMN OPQRST UVWXYZ 0123456789。 while (true) { if ((posAt = (39。 @39。 , posCur)) != string::npos) { posStart = (tags, posAt 1) + 1。 // find_last_not_of 查找控制字符序列中最后一个不出现在操作字符序列中的字符位置,并返回该位置; posEnd = (tags, posAt + 1)。 posTmp = (39。 .39。 , posAt + 1)。 // domain has at least one dot if (posTmp != string::npos amp。 amp。 posTmp posEnd 1 amp。 amp。 posStart != posAt amp。 amp。 posEnd != posAt + 1) { = (posStart, posEnd posStart)。 AddEmail(, url)。 // add the to special data struct } posCur = posEnd。 } else { return。 } }//while } 忽略大小的字符串比较 string 类没有提供忽略大小写的比较。 我们可以利用 basic_string 模板类来实现。 basic_string 的特化类的比较是通过其模板参数 char_traits 定义的。 所以我们需要重新实现一个忽略大小写的 char_traits 类,然后用它特化 basic_string。 下面分别实现了窄字符和宽字符版本。 源程序如下: //: ifndef ICHAR_TRAITS_H define ICHAR_TRAITS_H include string include cctype include cwctype include ostream /////////////////////////////////////////////////////////////////////// using std::toupper。 struct ichar_traits: std::char_traits char { static bool eq(char c1, char c2) { return toupper(c1) == toupper(c2)。 } static bool lt(char c1, char c2) { return t。cprime笔记(编辑修改稿)
相关推荐
由逗号操作符将几个表达式连接起来,符合 C++语法规则的式子。 由条件运算符将运算对象连接起来,符合 C++语法规则的式子。 在函数中控制程序流程执行的基本单位,如 if 语句 ,while 语句 ,switch 语句 , do 语句 , 表达式语句等。 封闭于大括号 {}内的语句序列。 for 语句 , while 语句 , do 语句三种。 基于某一条件在两个选项中选择其一的语句称为条件语句
2) 1。 关于 c 的 main函数 2。 15 个人循环报数,报到 N 的出列,找出最后留下的那个人,算法填空题 2。 找出一个给出的并行解决方案的错误情况 3。 关于 GPIO,intel的四种体系结构 选择题 10 题 有关 vc 和 c,指针, HyporThreading Dualcore等等 看也看不懂的 2020 年的 1:概率题。 x,y 为随机变量,联合概率密度 f(x,y)
this class). Please do not use MFC, STL and other libraries in your implementation. a[100]存放了 100个数 ,这 100个数取自 199,且只有两个相同的数 ,剩下的 98 个数不同 ,写一个搜索算法找出相同的那个数的值 .(注意空间效率时间效率尽可能要低 ). 1. 下面这段代码的输出是多少 (在 32
... 769 Region.. 770 调试须知 ...... 770 绘制可滚动的窗口 ...... 771 世界、页面和设备坐标 ...... 776 颜色 ...... 777 红绿蓝 (RGB)值 ..... 777 命名的颜色 ..... 777 图形显示模式和安全的 调色板 ..... 778 安全调色板 ..... 779 画笔和钢笔 ...... 779 画笔 .....
C++与 C及其它语言的混合编程。 明白了 C++中 extern C的设立动机,我们下面来具体分析 extern C通常的使用技巧: extern C的惯用法 ( 1) 在 C++中引用 C 语言中的函数和变量,在包含 C 语言头文件(假设为 ) 时 ,需进行下列处理: extern C { # i nclude } 而在 C 语言的头文件中, 对其外部函数只能指定为 extern 类型 ,
...................................................................................................................43 Struct members ..................................................................