C++标准库string类型

来源:互联网 发布:淘宝买家信用度怎么升 编辑:程序博客网 时间:2024/06/03 21:21
//标准库的string类型#include <string>#include <iostream>using namespace std;//或者可以这样//using std::string;//using std::cin;//using std::cout;int main(){    //1.string的初始化有4种方式    //string s1;    //string s2(s1);    //string s3("value");    //string s4(5, 'c');    //cout<<"s1="<<s1<<endl;    //cout<<"s2="<<s2<<endl;    //cout<<"s3="<<s3<<endl;    //cout<<"s4="<<s4<<endl;    //2.string对象的读写    //string s;    //cin >> s;   //这里有两个注意点:1.读取并忽略开头所有的空白字符(如空格,换行符,制表符)2.读取字符,直到再次遇到空白符,读取终止    //cout<<s<<endl;    //string s1, s2;    //cin>>s1>>s2;    //cout<<"s1="<<s1<<endl;    //cout<<"s2="<<s2<<endl;    //3.读入未知数目的string    //string word;    //while (cin >> word) //直到读到文件尾,跳出循环    //{    //    cout<<word<<endl;       //}    //4.用getline读取整行文本    //getline有两个参数,一个输入流对象和一个string对象    //getline 函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。getline函数返回时会丢弃换行符    //和输入操作符不一样的是,getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。    //如果第一个字符就是换行符,则 string 参数将被置为空 string。    //string line;    //while (getline(cin, line))    //{    //    cout<<line<<endl;    //}    //5.string的size和empty操作    //string st("hello tom\n");    //cout<<"the size of st="<<st.size()<<endl;//should be 10, including \n    //if (st.empty())    //{    //    //...    //}    //6.string::size_type类型    //7.string关系操作符    //关系操作符 ==, !=, <, <=, >, >=    //关系操作符比较两个 string 对象时采用了和(大小写敏感的)字典排序相同的策略:    //8.string对象的赋值    //理论上存在效率问题,它必须先把 st1 占用的相关内存释放掉,然后再分配给 st2 足够存放 st2 副本的内存空间,    //最后把 st2 中的所有字符复制到新分配的内存空间。    //string st1, st2 = "The expense of spirit";    //st1 = st2; // replace st1 by a copy of st2    //9.两个string对象相加    //string s1("hello, ");    //string s2("world!");    //string s = s1 + s2;    //cout<<s<<endl;    //s1 += s2;    //cout<<s1<<endl;    //10.和字符串字面值的连接    //当进行 string 对象和字符串字面值混合连接操作时,+ 操作符的左右操作数必须至少有一个是 string 类型的:    //string s1("hello");    //string s2("world");    //string s = s1 + " " + s2 + "!";    //cout<<s<<endl;    //string s1 = "hello"; // no punctuation    //string s2 = "world";    //string s3 = s1 + ", "; // ok: adding a string and a literal    //string s4 = "hello" + ", "; // error: no string operand    //string s5 = s1 + ", " + "world"; // ok: each + has string operand, s1 + "," returns a string operand    //string s6 = "hello" + ", " + s2; // error: can't add string literals    //11.从string对象获取字符    //string str("some string");    //for (string::size_type index = 0; index < str.size(); index++)    //{    //    cout<<str[index];    //}    //12.下标操作可用作左值    //string str("some string");    //for (string::size_type index = 0; index < str.size(); index++)    //{    //    str[index] = '*';    //}    //for (string::size_type index = 0; index < str.size(); index++)    //{    //    cout<<str[index];    //}    //13.计算下标值    //标准库不要求检查索引值,所用索引的下标越界是没有定义的,这样往往会导致严重的运行时错误。    //14.string对象中字符的处理    //cctype头文件中的函数    //    isalnum(c) 如果 c 是字母或数字,则为 True。    //    isalpha(c) 如果 c 是字母,则为 true。    //    iscntrl(c) 如果 c 是控制字符,则为 true    //    isdigit(c) 如果 c 是数字,则为 true。    //    isgraph(c) 如果 c 不是空格,但可打印,则为 true。    //    islower(c) 如果 c 是小写字母,则为 true。    //    isprint(c) 如果 c 是可打印的字符,则为 true。    //    ispunct(c) 如果 c 是标点符号,则 true。    //    isspace(c) 如果 c 是空白字符,则为 true。    //    isupper(c) 如果 c 是大写字母,则 true。    //    isxdigit(c) 如果是 c 十六进制数,则为 true。    //    tolower(c) 如果 c 大写字母,返回其小写字母形式,否则直接返回 c。    //    toupper(c) 如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。    //string s("hello world!!!");    //string::size_type punct_cnt = 0;    //for (string::size_type index=0; index<s.size(); index++)    //{    //    if (ispunct(s[index]))    //    {    //        punct_cnt++;    //    }    //    s[index] = toupper(s[index]);    //}    //cout<<"punct of "<<s<<" is "<<punct_cnt<<endl;    //建议:采用 C 标准库头文件的 C++ 版本//    C++ 标准库除了定义了一些选定于 C++ 的设施外,还包括 C 标准库。//    C++ 中的头文件 cctype 其实就是利用了 C 标准库函数, 这些库函数就//    定义在 C 标准库的 ctype.h 头文件中。//    C 标准库头文件命名形式为 name 而 C++ 版本则命名为 cname ,少了//    后缀, .h 而在头文件名前加了 c 表示这个头文件源自 C 标准库。因此,//    cctype 与 ctype.h 文件的内容是一样的,只是采用了更适合 C++程序//    的形式。特别地, cname 头文件中定义的名字都定义在命名空间 std 内,//    而 .h 版本中的名字却不是这样。//    通常,C++ 程序中应采用 cname 这种头文件的版本,而不采//    用 name.h 版本,这样,标准库中的名字在命名空间 std 中保持一致。//    使用 .h 版本会给程序员带来负担,因为他们必须记得哪些标准库名字//    是从 C 继承来的,而哪些是 C++ 所特有的。    return 0;}

0 0