设为首页收藏本站
查看: 404|回复: 5

12.《剑指C++》之从C到C++(12)

[复制链接]
  • TA的每日心情
    擦汗
    昨天 08:01
  • 签到天数: 760 天

    [LV.10]以坛为家III

    发表于 2020-6-17 08:15:42 | 显示全部楼层 |阅读模式
    本帖最后由 御天行 于 2020-6-17 08:15 编辑

    ======《剑指C++系列》:总目录======

    本讲主要介绍:字符串类string
    string是C++中处理字符串的泪,是对C语言中字符串的数据和行为的包装。使得对字符串的处理,更简单易用。
    初始化及基本操作
    初始化及赋值:
    1. #include <iostream>
    2. using namespace std;

    3. int main()
    4. {
    5.     //初始化及赋值操作
    6.     string str = "Honker";
    7.     cout<<str<<endl;
    8.     str = "Hellow";
    9.     cout<<str<<endl;

    10.     //拷贝操作:C++支持直接用一个字符串初始化另一个字符串
    11.     string s = str;
    12.     cout<<s<<endl;

    13.     str = "Hell ow";  //在对字符串赋值的时候,空格也是一个字符,不会被截断
    14.     cout<<str<<endl;

    15.     return 0;
    16. }
    复制代码
    输入截断问题:
    1. #include <iostream>
    2. //#include<string.h>
    3. using namespace std;

    4. int main(){

    5.     //输入截断,之前我们曾讲过,在输入字符串的时候,如果有空格,会被当成截断的信号
    6.     string str;
    7. #if 0
    8.     cout<<"please key str: ";
    9.     cin>>str;
    10.     cout<<"your key str: "<<str<<endl;
    11. #else if
    12.     //改进版
    13.     //通过getline函数,即可解决
    14.     cout<<"please key str:  ";
    15.     getline(cin,str);
    16.     cout<<"your key str: "<<str<<endl;
    17. #endif
    18.     return 0;
    19. }
    复制代码
    C++通过对底层的封装(实际上就是对C语言中的字符串处理函数的封装),实现的字符串之间的直接赋值、拷贝等操作,用起来比C语言方便得多
    运算符重载
    string 重载了运算符+ < > = != += ,使字符串的操作变的非常简单。其运算方式类似于普通数值运算,这是运算符重载的好处。
    1. #include <iostream>
    2. using namespace std;

    3. int main(){

    4.     string s1 = "Hellow";
    5.     string s2 = "Hellow";

    6.     if(s1 < s2){
    7.         cout<<"s1 < s1"<<endl;
    8.     }
    9.     else if(s1 == s2){
    10.         cout<<"s1 == s2"<<endl;
    11.     }
    12.     else {
    13.         cout<<"s1 > s2"<<endl;
    14.     }

    15.     s2 = " Honker";
    16.     s1 += s2;
    17.     cout<<s1<<endl;

    18.     return 0;
    19. }
    复制代码
    成员函数c_str():
    C++为了兼容C语言的字符数组,特地提供了c_str函数(以C语言的字符串形式返回)
    1. #include <iostream>
    2. #include<string.h>
    3. using namespace std;

    4. int main(){

    5.     string str = "Hellow";
    6.     char buf[1024];
    7.     strcpy(buf,str.c_str());
    8.     cout<<buf<<endl;

    9.     //string字符串也能以C语言字符数组的方式进行操作
    10.     str[2] = '*';
    11.     cout<<str<<endl;

    12.     return 0;
    13. }
    复制代码
    关于string的成员函数还有很多,会在以后进行详细介绍。
    string数组
    在 C 语言中要存储如下这样的数据,要用到二维空间,要进行两个层次的空间申请与释放但在 C++中就不需要了,并且一样是高效的。

    1. #include <iostream>
    2. using namespace std;

    3. int main(){

    4.    string strArray[10]{
    5.        "I",
    6.        "am",
    7.        "hei",
    8.        "good",
    9.        "china",
    10.        "hellow",
    11.        "chinese",
    12.        "amercian",
    13.        "Honker666",
    14.        "by_yexing"
    15.    };

    16.    for(int i = 0; i<10; i++){

    17.        cout<<strArray[i]<<endl;
    18.    }

    19.     return 0;
    20. }
    复制代码

    至此,C++过渡篇已经结束了,在我们走进C++的大门之前,请先聆听C++之父给每一个C程序员的建议(这也是C++比C优越之所在)。
    Bjarne Stroustrup's Advice

    1.在 C++中几乎不需要用宏,用 const 或 enum 定义显式的常量,用 inline 避免函数调用的额外开销,用模板去刻画一族函数或类型,用 namespace 去避免命名冲突。
    2.不要在你需要变量之前去声明,以保证你能立即对它进行初始化。
    3.不要用 malloc,new 运算会做的更好。
    4.避免使用 void*、指针算术、联合和强制,大多数情况下,强制都是设计错误的指示器。
    5.尽量少用数组和 C 风格的字符串,标准库中的 string 和 vector 可以简化程序。
    6.更加重要的是,试着将程序考虑为一组由类和对象表示的相互作用的概念,而不是一堆数据结构和一些可以拨弄的二进制。


    上一篇:11.命名空间
    下一篇:待续~

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
  • TA的每日心情
    擦汗
    昨天 08:01
  • 签到天数: 760 天

    [LV.10]以坛为家III

     楼主| 发表于 2020-6-17 08:15:43 | 显示全部楼层
    过渡篇更新完毕之后,就不能保证每日一更了,请大家见谅。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    半小时前
  • 签到天数: 259 天

    [LV.8]以坛为家I

    发表于 2020-6-17 09:41:50 | 显示全部楼层
    嗯,我们明白的,不能每日一更就不能吧,毕竟楼主也忙!
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 08:01
  • 签到天数: 760 天

    [LV.10]以坛为家III

     楼主| 发表于 2020-6-17 09:51:13 | 显示全部楼层
    HQS1983 发表于 2020-6-17 09:41
    嗯,我们明白的,不能每日一更就不能吧,毕竟楼主也忙!

    感谢体谅  / 抱拳
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:21
  • 签到天数: 1463 天

    [LV.10]以坛为家III

    发表于 2020-6-17 12:00:34 | 显示全部楼层
    感谢楼主无私奉献!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2020-7-1 10:00:23 来自手机 | 显示全部楼层
    学习了 感谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /3 下一条

    红盟社区--中国红客联盟 

    Processed in 0.105078 second(s), 22 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表