有了using声明就无须专门的前缀(形如命名空间 :: )也能使用所需的名字了。using声明具有如下的形式:
using namespace::name ;
一旦声明了上述语句,就可以直接访问命名空间中的名字:
#include
//using声明,当我们使用名字cin时,从命名空间std中获取它
using std::cin;
int main (){int i;cin >> i; //正确:cin和std: :cin含义相同cout << i; //错误:没有对应的using声明,必须使用完整的名字std::cout << i; //正确:显式地从std中使用coutreturn 0;
}
注:头文件不应包含using声明
#include
using std::string;
直接初始化和拷贝初始化
string s5 = "hiya" ; //拷贝初始化
string s6 ( "hiya" ) ; //直接初始化
string s7(10, 'c') ; //直接初始化,s7的内容是cccccccccc
读写string对象
int main ()
string s; //空字符串
cin >> S; //将string对象读入s,遇到空白(即空格符、换行符、制表符等)停止
cout << s << endl; //输出s
string line;
//每次读入一整行,直至到达文件末尾
while (getline (cin, line)) //getline函数直到遇到换行符为止cout << line << endl;return 0;
string::size_type类型
由于size函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果
string加法:
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保 每个加法运算符(+) 的两侧的运算对象至少有一个是string:
string s4 = s1 +","; //正确:把一个string对象和一个字面值相加
string s5 = "hello"+ ","; //错误:两个运算对象都不是string
//正确:每个加法运算符都有一个运算对象是string
string s6 = s1 + "," + "wor1d" ; //表达式s1+ ","的结果是一个string对象
string s7 = "hello" + "," + s2; //错误:不能把字面值直接相加
注:因为某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同的类型。
在cctype头文件中定义了一组标准库函数处理这部分工作,表3.3列出了主要的函数名及其含义。

使用C++版本的C标准库头文件
cctype头文件(从C语言继承)和ctype.h头文件的内容是一样的,只不过从命名规范上来讲更符合C++语言的要求。特别的,在名为cname的头文件中定义的名字从属于命名空间 std,而定义在名为.h的头文件中的则不然。
使用范围for语句改变字符串中的字符
如果想要改变string对象中字符的值,必须把循环变量定义成引用类型,所谓引用只是给定对象的一个别名,因此当使用引用作为循环控制变量时,这个变量实际上被依次绑定到了序列的每个元素上。使用这个引用,我们就能改变它绑定的字符。
string s("Hello world!!!" );
//转换成大写形式。
for (auto &c : s) //对于s中的每个字符(注意:c是引用)c= toupper(c) ; //c是一个引用,因此赋值语句将改变s中字符的值
cout << s << endl;
下标运算符
string::size_type num; //用于保存从输入流读取的数
//依次处理s中的字符直至我们处理完全部字符或者遇到一个空白
for (decltype(s.size()) index = 0; index != s.size() && !isspace (s[index]); ++index)s[index] = toupper(s[index] );//将当前字符改成大写形式
程序的输出结果将是:
SOME string