using:
using namespace::name;
//这样声明之后,就可以直接访问命名空间中的名字
#include<iostream>
using std::cin;
int main()
{
int i;
cin >> i; //正确,cin和std::cin含义相同
cout << i; //错误,没有对应的using声明,必须用原来完整的名字
std::cout << i; //正确,显式地从std中使用cout
return 0;
}
//头文件中不应含有using声明
string:
//string表示可变长的字符序列,需要包含:
#include <string>
using std::string;
string s1; //默认初始化,s1是一个空字符串
string s2 = s1; //s2是s1的副本 等价于string s2(s1);
string s3 = "hiya"; //s3是该字符串字面值的副本 等价于string s3("hiya");
string s4(10,'c'); //s4的内容是cccccccccc
//如果使用等号‘=’初始,实际上执行的是拷贝初始化,编译器把右侧的初始值拷贝到新创建的对象去
//如果不使用等号,则执行的是直接初始化
//当初始值只有一个时,两者都行;如果想上面的s4一样初始化需要的值有多个,则一般使用直接初始化
string s5 = "hiya"; //拷贝初始化
string s6("hiya"); //直接初始化
string s7(10,'c'); //直接初始化
//非要用拷贝初始化处理用多个值初始化的情况也行,但要显式地创建一个临时对象用于拷贝
string s8 = string(10,'c'); //拷贝初始化
//等价于下面两条语句
string temp(10,'c');
string s8 = temp;
string操作:
os<<s 将s写到输出流os中,返回os
is>>s 从is中读取字符串赋值给s,字符串以空白分隔,返回is
getline(is,s) 从is中读取一行赋值给s,返回is
s.empty() s为空返回true,否则返回false
s.size() 返回s中字符的个数
s[n] 返回s中第n个字符的引用,位置n从0开始计数
s1+s2 返回s1和s2连接后的结果
s1=s2 用s2的副本代替s1原来的字符
s1==s2 如果s1和s2完全一样,则它们相等,区分大小写
< <= > >= 利用字符在字典中的顺序进行比较,区分大小写
读写string对象:
string s; //s是空字符串
cin>>s; //遇空格停止
cout<<s<<endl;
string s1,s2;
cin>>s1>>s2;
cout<<s1<<s2<<endl;
//如果输入" hello world "
//则输出"helloworld"
int main()
{
string word;
while(cin>>word) //反复读取,直到文件末尾
cout<<word<<endl; //每次成功读取后马上输出
return 0;
}
getline:
//如果想要让字符串保留输入的空格符,应该用getline代替>>
//getline函数的参数是一个输入流和一个string对象
//函数从输入流中读入内容,直到遇到换行符,注意换行符也被读入了,但换行符不会被存入string中
//换行符是被丢弃了
//如果直接输入换行符,则会得到一个空字符串
int main()
{
string line;
//每次读入一整行,直至文件末尾
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
string的empty和size操作:
//empty根据string对象是否为空而返回一个布尔值
while(getline(cin,line))
if(!line.empty()) //如果该字符串不为空
cout<<line<<endl;
//size函数范围字符串的长度(字符的个数)
string line;
while(getline(cin,line))
if(line.size()>80) //只输出字符数超过80的字符串
cout<<line<<endl;