Namespace Declarations

A using declaration let us use a name from a namespace without qualify the name with a namespace_name:: prefix.

//  using namespace::name
using std::vector
using std::string 

A sperate using declaration is required for each name.

Header should not include using declaration.

String

Initialize string

    string s1;          // default initialization; s1 is the empty string
string s2 = s1;
string s3 = "hello";
string s4(, 'c');  // s4 is cccccccccccccc

When we initialize a variable using =, we are asking the comiler to copy initialize the object by copying the initilizer on the right-hand side into the object being created. Otherwise, when we omit the =, we use direct initialization.

    string s4 = string(, 'c');    // copy initialization; lower efficiency

It is the same as:

    string tmp(, 'c');    // tmp is cccccccccc
string s4 = tmp;   // copy tmp to s4

Reading and Writing string

int main(){
string , s2;
cin >> s1 >> s2;
cout << s1 << s2 << endl;
}

The string input operator reads and discards any leading whitespace(e.g. spaces, newline, tabs). It then reads characters until the next whitespace character is encountered. So, if the input to the program is "Hello World!", the output will be "HelloWorld!".

Like the input operator, getline() return its istream argument. As a result, we can use getline() as a condiction just as we use the input operatocr as a condiction.

    string line;
while (getline(cin, line){
cout << line << endl;
}

The newline that causes getline to return is discarded; the newline is not stored in the sting. Because line don't contain a newline, we must write our won. As usually, we use endl as a newline, to end the current line and flush the buffer.

Because string::size() return an unsigned_type, it is essentual to remember that expression that mis signed and unsigned data can have surpring results.

For example, if n is an int that holds a negative, then s.size() < n will almost surely evaluate as true. It yield true because the negative value in n will convert to a large unsigned value.

You can avoid problems due to conversion between unsigned and int by not using ints in expressions that use size().

Assignment for string

In general, the library type strives to make it as easy to use library type as it is to use a built-in type. We can assigne one string object to another.

    string s1(, 'c'), s2;    // s2 is empty string
s1 = s2;       // replace the content of s1 with a copy of s2 -- empty string

The string library let us convert both character literals and string literals to strings.

    string s1= "hello", s2 = "world";
string s3 = s1 + ',' + s2 + "!";

When we mix string and string or character literals, at least one operand to each + operator must be of string type.

    string s6 = s1 + ", " + "world!";    // ok
string s7 = "hello" + ", " + s1; // error

s6 works in much the same way as when we chain together input or output expressions. s7 is illegal.

For historical reason, and for compatibility with C, string literals are not standard library strings.

Advise: Used the C++ version of C library Headers.

In addition to facilities defined specially for C++, the C++ library incorporate the C library. Headers in C have names of the form name .h. The C++ version's of these versions header are name c-name - they remove the .h suffix, and precede the name with the letter c.

Hence, cctype has the same content as ctype.h, but in a form that is appropriate for C++ programs.

The range-base for to process every character.

    string str("some thing");
for ( auto c: str){
cout << c << endl;
}

On each iteratoion, the next character in str will be copied into c. The changes in c will not impact the content of str.

    for (auto &c: str){
c = toupper(c);
}
cout << c << endls;

Remember that reference is just another name for the giving object. When we use a reference as our control varaible, the variable is bound to each element in the sequence in turn. we can change the character to which the reference is bound.

There are two ways to access individual characters in a string: a subscript or an iterator.

The subscript operator(the [] operator) return a reference to the character at the given position. The values we use to subscript a string must be >=0 and < size();

The return of using an index outside the range is undefined.

    if (!s.empty()){
cout << s[] << endl;
}

Any time we use a subscript, we must ensure the index is in range of the string's length.

Reference:

C++ Primer, Fifth Edition, 3.2. Library string Type

[C++] String Basic的更多相关文章

  1. c# post basic 接口

    string url = "http://xxxxxxxxx";//地址,请反复检查地址的准确性 string usernamePassword = "username: ...

  2. 2. Retrofit2 -- Basic Authentication on Android

    2. Retrofit2 -- Basic Authentication on Android android Retrofit tutorial 整合基本的认证 Retrofit 1.9 Retro ...

  3. 在ABP中创建Person实体类

    经过之前的准备目前我们的项目,终于可以搞正式的开发工作了. 创建实体Person 在Core类库中添加Person类 /// <summary> /// 联系人 /// </summ ...

  4. java设计模式之建造者模式

    学习了设计模式,一直感觉有进步又没有进步,与同学.同事探讨了一下.变化不可能一会就可以的,需要努力坚持.不管进步大小,也不管是否进步,做到勿忘初心,做自己喜欢的事情就好.还有几个设计模式一直没有写,原 ...

  5. go access database demo

    package main import ( "database/sql" "fmt" _ "github.com/lib/pq" " ...

  6. go liteIDE

    go  liteIDE 1 COMM FILE package pricetable import ( "fmt" "math" "os" ...

  7. http协议Authorization认证方式在Android开发中的使用

    我们都知道,http协议是一种无状态协议,在Web开发中,由于Session和Cookie的使用,使得服务端可以知道客户端的连接状态,即用户只需要在浏览器上登录一次,只要浏览器没有关闭,后续所有的请求 ...

  8. 用 for/in 在 Java 5.0 中增强循环

    这个方便的构造提供了什么?什么时候适用于代码? Brett McLaughlin (brett@newInstance.com), 作者/编辑, O'Reilly Media, Inc. 简介: fo ...

  9. 1111 WordReplace

    #include<iostream> #include<string> using namespace std; int main() { string sa,sb,s; wh ...

随机推荐

  1. 【js】深拷贝和浅拷贝区别,以及实现深拷贝的方式

    一.区别:简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝. 此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这 ...

  2. 本地打jar包到本地的Maven出库

    1.命令行输入 mvn install:install-file -DgroupId=jar包的groupId -DartifactId=jar包的artifactId -Dversion=jar包的 ...

  3. Linux 实时查看进程网络的使用情况

    一行代码实现 linux 指定进程网络的使用情况 pid=4203;count=0;while true;do info2=`sed -n '4,100p' /proc/$pid/net/dev |a ...

  4. springboot(2.0以上) --数据源切换时报错

    在进行数据源切换时spring.datasource.type类型根据源码所给的默认值修改后依然报错 先看源码:标色部分 ,  就是springboot所给的数据源 ,  正常来说只要在配置文件中修改 ...

  5. Python 3 字符串转MD5形式

    Python 字符串转MD5: def getStrAsMD5(parmStr): #1.参数必须是utf8 #2.python3所有字符都是unicode形式,已经不存在unicode关键字 #3. ...

  6. ps命令 百度+加自己的理解

    ps故为process status的缩写,即为进程状态的命令, ps命令详解, 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时, ...

  7. URL参数获取/转码

    JS中对URL进行转码与解码 1.escape 和 unescape escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值. 采用unicode字符集对指定的字符串 ...

  8. jquery--DOM操作基础

    元素的访问 元素属性操作 获取:attr(name):$("#my").attr("src"); 设置:attr(name,value):$("#my ...

  9. centos总结linux下svn安装与使用

    一.安装篇 centos下yum安装 yum install subversion 查看安装是否成功: svnserve --version 查看安装内容与位置 rpm -ql subversion ...

  10. JS 创建对象总结

    狭义:new 构造函数. (注:在JS中创建对象只有一种方式,就是new 构造函数.其中字面量的方式是一种语法糖,本质仍然是new 构造函数) 广义:工厂模式(解决复杂度) 构造函数模式(解决复杂度, ...