常规操作

1、定义和初始化(直接初始化与拷贝初始化)
2、操作string对象( s.empty() s.size() )
image.png

遍历每个字符(使用范围的for语句)

  1. std::string str("hello world");
  2. // 遍历每一个元素
  3. for (auto s : str)
  4. std::cout<< s<< std::endl;

string::size_type 类型

对于size函数来说,返回一个int或者返回一个unsigned 似乎都是合理的。
但其实size 函数返回的是一个string::size_type 类型的值。

虽然我们不清楚string::size_type 类型的细节,但是有一点是肯定的:它是一个无符号类型的值,而且足够存放下任何string对象的大小。

在C++11中,允许编译器通过auto或者decltype来推断变量的类型:

  1. // len 的类型是string::size_type
  2. auto len = str.size();

注意

由于size函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。

例如:
假设n是一个具有负值的int,则表达式 s.size() <n 判断结果几乎肯定是true 。这是因为负值n 会自动地转换成一个比较大的无符号值。

  1. // len 的类型是string::size_type;
  2. auto len = str.size();
  3. bool b = len > -1;
  4. // return 0 false
  5. cout << b << endl;

size(), length(), strlen()

先说 size() 和 length(),这两个方法都要先 include ,两者使用起来无任何差别。
即,str.size() == str.length() 为真。

引用cplusplus.com中的话:
Both string::size and string::length are synonyms and return the same value, which is the length of the string, in terms of bytes.

而 strlen() 是中的,是C语言的遗留物。
引用cplusplus.com中的话:
cstring::strlen returns the length of the C string str. In C++, char_traits::length implements the same behavior.
即 strlen(str) == str.length() == str.size() 为真。