C++ sstream 中处理字符串

C++引入ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。

istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符,stringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

下面我们分离以空格为界限,分割一个字符串。

#include<iostream>
#include<sstream>
#include<string>
int main()
{
    std::string str = "I am coding ...";
    std::istringstream is(str);
    do
    {
        std::string substr;
        is>>substr;
        std::cout << substr << std::endl;
    } while (is);
    return 0;
}

程序输出

I

am

coding

...

另外用vector也可以实现

#include <vector>
#include<iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string str("I am coding ...");
    string buf;
    stringstream ss(str);
    vector<string> vec;
    while (ss >> buf)
        vec.push_back(buf);
    for (vector<string>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
        cout << *iter << endl;
    }
    return 0;
}

补充知识点,自己积累学习

在类型转换中使用模板

你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如,需要将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值t为参数的to_string()函数。to_string()函数将t转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝:

template<class T>

void to_string(string & result,const T& t)

{

   ostringstream oss;//创建一个流

   oss<<t;//把值传递如流中

   result=oss.str();//获取转换后的字符转并将其写入result
}

这样,你就可以轻松地将多种数值转换成字符串了:

to_string(s1,10.5);//double到string

to_string(s2,123);//int到string

to_string(s3,true);//bool到string

可以更进一步定义一个通用的转换模板,用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value,功能是将in_value值转换成out_type类型:

template<class out_type,class in_value>

out_type convert(const in_value & t)

{

   stringstream stream;

   stream<<t;//向流中传值

   out_type result;//这里存储转换结果

   stream>>result;//向result中写入值

    return result;

}

这样使用convert():

double d;

string salary;

string s=”12.56”;

d=convert<double>(s);//d等于12.56

salary=convert<string>(9000.0);//salary等于”9000”

时间: 2024-12-26 16:47:20

C++ sstream 中处理字符串的相关文章

第33课 C++中的字符串

1. 历史遗留问题及解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C到C++的进化过程引入了自定义类型 ②在C++中可以通过类完成字符串类型的定义 2. 标准库中的字符串类 (1)C++直接支持C语言的所有概念 (2)C++语言中没有原来的字符串类型 (3)C++标准库提供了string类型(支持字符串的连接.大小比较.子串查找和提取.字符串的插入和替换等操作) [

Java中的字符串常量池

最近做到一个题目: 问题:String str = new String("abc"),"abc"在内存中是怎么分配的?    答案是:堆,字符串常量区. 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念."abc"为字面量对象,其存储在堆内存中.而字符串常量池则存储的是字符串对象的一个引用. Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid&qu

关于Delphi中的字符串的详细分析

关于Delphi中的字符串的详细分析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short String) 长字符串(Long String) 宽字符串(Wide String) 零结尾字符串(Null-Terminated String).PChar和字符数组 1.短字符串(Short String) 固 定长度,最大字符数个数为255,短字符串也成为长度字节(Length-byt

android中对字符串的复数处理方法

如果你开发的应用覆盖多个国家,在处理数量的问题的时候,一定会碰到根据不同的数量使用不同的字符串. 不同的语言在处理数量对待方式不一样,这种情况非常常见,举一个简单的例子说明下中文和英文在修饰数量上的差异: 在中文里,1本书,2本书,...... n本书, 在英文里,1 book, 2 books, ...... n books.然而,即使在0的情况下,也要用books, 即0 books. 中文在对待单复数情况下并没有作区分,而英文就做了区别.除了英文之外,很多语言都做了有类似的区别.另外在有些

Java中的字符串

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 1.字符串可以被GC回收了 我们之前在表达式的陷阱中就说到"对于Java程序中的字符直接量,JVM会使用一个字符串池来保护他们:当第一次使用某个字符串直接时,JVM会将它们放入字符串池进行缓存."在jdk1.7之前HotSpot将该字符串常量池放在永久代中,所以当初我们还说"在一般情况下,字符串缓冲池中字符串对象不会被垃圾回收",但是jdk1.7以后HotSpot就将字符串常量

linux sed 批量替换多个文件中的字符串

转载:http://blog.csdn.net/kauu/article/details/1757325 一.linux sed 批量替换多个文件中的字符串 sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 例如:替换/home下所有文件中的www.bcak.com.cn为bcak.com.cn sed -i "s/www.bcak.com.cn/bcak.com.cn/g" `grep ww

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

搜索文件或目录中包含字符串的文件 java小程序

package com.ruishenh.spring.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.

c#中的字符串查找函数

indexOf()方法,查找某字符串在一个字符串内的位置,没有则返回-1string aa="abcdef";int a=aa.indexOf("bc");//a会等于1int b=aa.indexOf("a");//b会等于0int c=aa.indexOf("g");c会等于-1所以你只要判断返回出来的int值是不是小于0就知道这个字符串里有没有包含指定的另一个字符串 c#中的字符串查找函数,布布扣,bubuko.com