C++字符串分隔

记录两种C++中的字符串分隔方法。

代码仅作为提供思路参考,不能实际运行。

一、getline

getline函数介绍: 
头文件:#include <string.h>

函数原型:istream& getline (istream& is, string& str, char delim);

函数说明:从is输入流中提取依次字符存存放到str中直到遇到delim字符或者换行符’\n’。

这个方法的缺点是不能直接对字符串进行操作,需要把字符串类型先转换成流,然后进行分隔。当处理的文本较大,行数较多的时候,类型之间的转换时很耗时的,效率不算高。

    string fileContent;
    string strLine;      //保存文本的一行
    string strFileds;    //分隔出来的字段
    string strfileName;
    ifstream inputFile;
    strFileName = "testdata.csv";
    inputFile.open(strFileName.c_str());
    fileContent << inputFile.rdbuf();
    stringstream temString;    // using for splitting
    while (getline(fileContent, strLine)) //reading line
    {
            temString << strLine;    //类型转换成流
            while (getline(temString, strFileds, ‘,‘))
            {
                cout << strFileds << " ";
            }
    }

二、指针

另一种字符串分隔的方法是通过指针一个一个扫描字符串,当遇到分隔符的时候,就截取出来。效率较上一种方法更高。

    ifstream inputFile;
    long long l_Length;
    char *c_pBuffer;
    string  filepath = "testdata.csv";
    inputFile.open(filepath.c_str());

    if(inputFile.is_open())
    {
        inputFile.seekg(0, ios::end);
        l_Length = inputFile.tellg();
        inputFile.seekg(0, ios::beg);
        c_pBuffer = new char[l_Length];
        inputFile.read(c_pBuffer, l_Length);
    }
    else
    {
        cout << "Cannot open file!\n";
    }

    char *c_pHead, *c_pTail;
    c_pHead = c_pTail = c_pBuffer;   

    /* translating the file*/
    while (!inputFile.eof())
    {
        if (*c_pTail == ‘,‘ || *c_pTail == ‘\n‘ )
        {
            c_pTail++;
            string strTemp = string(c_pHead, c_pTail);
            cout << strTemp;
            c_pHead = c_pTail;
        }
        else
        {
            c_pTail++;
        }
    }        
时间: 2024-08-02 10:59:21

C++字符串分隔的相关文章

C#中Split用法~字符串分隔

1.用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach (string i in sArray) Response.Write(i.ToString() + "<br>");输出结果:aaabbbccc2.

StringTokenizer:字符串分隔用法简介

StringTokenizer:字符串分隔解析类型 属于:java.util包. 1.构造函数. 1. StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象.java默认的分隔 符是“空格”.“制表符(‘\t’)”.“换行符(‘\n’)”.“回车符(‘\r’)”. 2. StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并 提供一个指定的

Java 字符串分隔 split

Java中的我们可以利用 split 方法(Java.lang.string.split)把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项. split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator,[limit]]) stringObj: 必选项.要被分解的 String 对象或文字,该对象不会被split方法修改. separator:可选项.字符串或正则表达式对

华为机试题-字符串分隔

题目描述 ?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 #include <iostream>#include <string> using namespace std; int main

字符串分隔 -&gt;连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组; ?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 import java.util.*; public class Main{     public static void main(String[] ar

华为OJ平台——字符串分隔

题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输出 输出到长度为8,的新字符串数组样例输入 abc 123456789样例输出 abc00000 12345678 90000000 思路: 都是直接处理,没有具体的方法而言 注意点: 华为的OJ平台的输入输出有点坑,好多次的程序都在这里出问题,在Eclipse上运行的结果没问题,然后在OJ上就是编

华为机试:字符串分隔

题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 示例1 输入 abc 123456789 输出 abc00000 12345678 90000000 Java: 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public cl

OJ题:字符串分隔

题目描述 ?连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:?长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输入字符串(输入2次,每个字符串长度小于100) 输出描述: 输出到长度为8的新字符串数组 输入例子: abc 123456789 输出例子: abc00000 12345678 90000000 程序如下: #include<stdio.h> #include <string.h> int main() { int i = 0

把某一个用逗号或者/或者其他符号作为间隔的字符串分隔成一张表数据。

我们日常开发过程中,非常常见的一种需求, 在前面我们介绍了 [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式,当然按照这种方式转变一下也是可以实现的,但是我这里有以前我一直使用的另外一种方式,也记录一下吧. 依照惯例,我们首先来看看效果. 调用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',') 具体函数如下: -- =============================================