关于最近学习string与sstream头文件和c++某些特性

        好久没有更新博客了,今天来走一波c++。最近学习的是string与stringstream类型。

        刚开始我看着这两尊佛有点懵,搞不清楚它们的意义何在,如果说string是取代字符数组更方便使用的话,你们stringstream是干什么的,参考了《算法竞赛入门经典》(第二版)(俗称紫书)、《c++ primer plus》还有一些博客,大概明白了是怎么回事。

        所谓string类,它的头文件是<string>,注意前面没有c后面也没有.h。附上头文件截图一张,注意里面的<istream>,它有大作用。


        在c语言中,我们如果要操作字符数组,只能依靠<string.h>这个头文件所提供的字符串操作函数,当然你说我是自己定义函数的话╮(╯▽╰)╭,当我没说。出场率比较高的函数大概就是strlen、strcmp、strcpy、strcat这些了,但是既然是函数,那也就意味着在使用上会有些复杂,毕竟要调用函数嘛。

        但是,在c++,作为一门旨在面向对象编程的语言,当然不可能再像c语言那样繁杂,一切都给你打包好,然后放在了<string>头文件里。

        string是一个类型,取代了字符数组的位置用来保存字符串。                示例:

    string str1 = "abcd", str2 = "efg";

        这就是一个字符串了,是不是很简洁明了啊?(*^_^*)

        不需要指定大小,只要给一个名字来表示该字符串就好啦,如果要从键盘上获取数据的话,可以用cin >> str;

        如果想要实现类似于strcat函数的效果的话很简单:

    str1 += str2;

        对,你没看错,只需要+=就像是在操作int、double一样,输出str1你就会得到“abcdefg”。

    cout << str1 + str2 << endl;

        这种方式输出的结果和上面的一样,但是str1的话并没有改变,相信它的含义你们应该猜得出来。

        and......没有 -,别想了。

        至于copy函数......没错( •̀ ω •́ )✧就是等号大大了:       

    str1 = str2;

        这时你输出str1将会得到“efg”,也就是把str2赋给了str1。那么这么多方便的东西是哪来的呢?

        就是<string>头文件啦,里面重载了n多类似于+、+=、=这些运算符,都封装进去了,我们只需要直接用就好了,值得一提的是,string很慢,方便的代价当然是效率啦╮(╯▽╰)╭。

        那么<sstream>又是干什么的呢?

        

        上面是<sstream>头文件的部分截图,相信观察力敏锐的童鞋已经注意到了#include <string>这行代码,对,它包含了<string>。从头文件的名字我们也可以看出来string流(*^_^*),而它的作用,就是让字符串能像流一样读写它还提供了一个新类型stringstream。

    string line;
    getline(cin, line);
    stringstream ss(line);

        上面几行代码的大概做了这么几件事:

    1、声明了一个string类的变量储存了输入的第一行的所有字符;

    2、把这些字符复制给了stringstream类型的变量ss;

        当我们做完这些操作后,我们就可以对ss进行流的读写操作了,比如说这样:

int nums[20], i = 0, sum = 0;
while(ss >> nums[i]){
    sum += nums[i];
    i++;
}

        其他的代码我相信都知道,主要的是ss >> nums[i];这里,就是流的运算啦,它会把里面的数字流给nums[i],而且以空格区分两个数据。值得注意的是,当执行之后ss里的数据流就没有了,和水很像,流过去了,这里就没有了。

        简而言之,我说的这些东西给我们操作字符串提供了很大的便利,至于效率嘛.....这是没办法的事情。以后有机会我会继续更新的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值