Notes from C++ Primer

Operations

Operations of string support lots of operations of sequential container.

  • string s;          define a new empty string object, named s.
  • string s(cp);    define a new string object, initialized by a C-style string pointed by cp.
  • string s(s2);    define a new string object initialized by the copy of s2.
  • is >> s;          read a string splited by space from input stream is, write into s.
  • os << s;         output the s into output stream os.
  • getline(is, s)    get a line of string from input stream is, output into s.
  • s1 + s2           concatenate string s1 and string s2.
  • s1 += s2        concatenate string s2 at the end of string s1.

As the operation of string is almost the same as container, many executions of vector can be replaced like codes below:

string s("Hiya!");
string::iterator iter = s.begin();
while(iter != s.end())
cout << *iter++ << endl; // postfix increment: print old value

Operations only for string

There're three base operations supported by string type but container type.

  • substr function, return the sub-string of current string object.
  • append and replace function, modify string object.
  • a series of find function, which is used to find string object.

Operations of sub-string:

  • s.substr(pos, n)    return a substring of s, from position pos with length n in s.
  • s.substr(pos)        return a substring of s, from position pos to the end of s.
  • s.substr()             return a copy of s.

1. substr

We can pass the beginning position pos of ing substring and a counter n which determines the length of substring to function substr to finish returning substring.

string s("hello world");

// return substring of 5 characters starting at position 6
string s2 = s.substr(6, 5); // s2 = world

An alternative way is:

// return substring from position 6 to the end of s
string s3 = s.substr(6); // s3 = world

2. append and replace

append function offers an shortcut to insert string at the end of string:

string s("C++ Primer");		// initialize s to "C++ Primer"
s.append(" 3rd Ed."); // s == "C++ Primer 3rd Ed." // equivalent to s.append(" 3rd Ed.")
s.insert(s.size(), " 3rd ED.");

replace function is a shortcut of deleting some characters and then inserting other contents:

// starting at position 11, erase 3 characters and then insert "4th"
s.replace(11, 3, "4th"); // s == "C++ Primer 4th Ed." // equivalent way to replace "3rd" by "4th"
s.erase(11, 3); // s == "C++ Primer Ed."
s.insert(11, "4th"); // s == "C++ Primer 4th Ed."

Also, we don't need to require the length of inserting string is the same as the length of deleting string. Thus we can replace longer or shorter string:

s.replace(11, 3, "Fourth");		// s == "C++ Primer Fourth Ed."

3. find operations of string

string class offers 6 kinds of serarch function. They all return a string::size_type type value indicating the position of match, or return a special value string::npos indicating fail. string class define npos as a value larger than any validate index of string.

  • s.find(args)                      find the first position match with args in s.
  • s.rfind(args)                     find the last position match with args in s.
  • s.find_first_of(args)          find the first position match with any character in args in s.
  • s.find_last_of(args)           find the last position match with any character in args in s.
  • s.find_first_not_of(args)    find the first position of character not belong to args in s.
  • s.find_first_not_of(args)    find the first position of character not belong to args in s.

3.1 The simple accurate search is find function.

string name("AnnaBelle");
string::size_type pos1 = name.find("Anna"); // pos1 == 0

By default, find operation is case sensitive:

string lowercase("annabelle");
pos1 = lowercase.find("Anna"); // pos1 == npos

3.2 Find any character

The process of finding any character is more complicated. For example, find the first number in name:

string numerics("0123456789");
string name("r2d2");
string::size_type pos = name.find_first_of(numerics);
cout << "found number at index: " << pos
<< " element is " << name[pos] << endl; // pos == 1

3.3 Find from a predetermined position

We can pass one more parameter pos to the find function, which indicates the beginning position of finding. Generally, this parameter is used to find all the match characters of string s in a loop.

string::size_type pos = 0;

// each trip reset pos to the next instance in name
while((pos = name.find_first_of(numerics, pos)) != string::npos)
{
cout << "found number at index: " << pos
<< " element is " << name[pos] << endl; ++pos; // move to the next character
}

3.4 Find the mismatch position

find_first_not_of function is used to find the first position of mismatch character. For example, finding the first nonnumerical character:

string numbers("0123456789");
string dept("03714p3"); // returns 5, which is the index to the character 'p'
string::size_type pos = dep.find_first_not_of(numerics);

3.5 Reverse finding

We can also find the character from right to left:

string river("Mississippi");
string:size_type first_pos = river.find("is"); // return 1
string:size_type last_pos = river.rfind("is"); // return 4

Attention: find_last function is very likely the find_first function. The only difference is the return of find_last is the last position of first match substring, and the find_first returns the first position of first match match substring.

string Type的更多相关文章

  1. Library string Type

    The string type supports variable-length character strings.The library takes cares of managing memor ...

  2. setLocale(java.util.Locale), setCharacterEncoding(java.lang.String),setContentType(java.lang.String type)

    对于setCharacterEncoding(java.lang.String),这个方法是javax.servlet.ServletRequest和javax.servlet.ServletResp ...

  3. [Cpp primer] Library string Type

    In order to use string type, we need to include the following code #include<string> using std: ...

  4. Library string type(2)——关于String的操作

    关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...

  5. Excel Sheet Column Title (STRING - TYPE CONVERTION)

    QUESTION Given a positive integer, return its corresponding column title as appear in an Excel sheet ...

  6. Redis String Type

    Redis字符串的操作命令和对应的api如下: set [key] [value] JedisAPI:public String set(final String key, final String ...

  7. PythonStudy——字符串类型 String type

    # 1.定义# 需求:你是"好学生" s1 = "你是\"好学生\"" print(s1) # 可以通过引号的嵌套,使内部不同的引号在不转义 ...

  8. entity framework异常 The specified cast from a materialized 'System.Int32' type to the 'System.String' type is not valid

    ROW_NUMBER() OVER (ORDER BY (select Null)) AS Id entity framework 查询中有这句会有异常

  9. (type interface {}) to type string

    go 语言开发中,经常会在函数中碰到使用 insterface{} 作为接收任意参数,但是我们接收的数据经常是需要做类型转换,由于是初学者,因此,初次转换我是直接就 func New(paramete ...

随机推荐

  1. Shell脚本1-20例

    1.每天生成一个文件 描述:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron ...

  2. leetcode2

    /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...

  3. Android应用开发中,第三方集成新浪微博(sinaWeiboSDK)的过程记录

    作为一个android开发人员,不可避免的要学会使用和集成第三方API的能力 而新浪微博作为现在最主要的新闻速递媒体,使用十分普遍,并且提供了较为详细的API接入方法,故此选择集成sinaWeibiS ...

  4. 一直觉得用java很不顺心

    一直觉得用java很不顺心,今儿想明白一个事情.如果把汇编比作石器时代,c作为冷兵器时代,c++作为工业革命之后的热兵器及机械化时代,而c#之类则进入了现代科学世界,至于go,python之流,大概可 ...

  5. MySQL中的sort_buffer_size参数大小的设置问题

    看到sort_buffer_size这个参数(connect级别的参数,MySQL5.7,默认值是1048576字节,也就是1MB)的默认值这么小,想着是不是可以调大一点,反正内存动不动几十个GB的, ...

  6. 使用chrome浏览器无法访问github提示不是私密连接且无继续前往选项

    在hosts文件中添加如下内容: 192.30.253.112 github.com192.30.253.119 gist.github.com151.101.100.133 assets-cdn.g ...

  7. MariaDB ColumnStore初探(1):安装、使用及测试

    相信大家在对接BI数据报表部门有很深刻的体验,高大上的复杂SQL关联JOIN十几张表在InnoDB里跑起来,会让你酸爽到死.它的出现正是解决这个问题,DBA能不能轻松愉快地玩耍,就要靠它了,“神州行我 ...

  8. 8. String to Integer (atoi) 字符串转成整数

    [抄题]: Input: "42" Output: 42 Example 2: Input: " -42" Output: -42 Explanation: T ...

  9. boost::asio 学习

    安装 下载-解压 指定安装目录 ./bootstrap.sh --prefix=/usr/local/boost_1_68_0 查看所有必须要编译才能使用的库 ./b2 --show-librarie ...

  10. 二、putty的下载安装和基本使用方法教程

    转载自:https://baijiahao.baidu.com/s?id=1597811787635071952&wfr=spider&for=pc PuTTY是一款开源(Open S ...