【编程】VC++中如何按字符来分割字符串

许多地学信息数据通常是由采集工具自动生成的文本文档来保存,相邻数据间常以空格、逗号或制表符等隔开(如下图),通常一个文本文档保存的数据能达到好几MB,手工录入到数据处理软件或数据库中几乎是不可能的,可以采用这样一种思路来处理这种数据:将每行的数据读入并保存到字符串中,然后每行再按分隔符分割成若干数据分别保存在数组中,进而输出成其它类型的文档或保存到数据库中就方便多了。

文本数据

txt格式的数据

最近在学习MFC,所以只介绍一下VC++中实现这种字符串分割的方法。其实只需要编写一个类似于php中的explode的函数即可,将需要处理的字符串、分隔符传入到函数中,然后将分割开的各项保存到一个字符串数组中即可。

如何从文本文档中读取数据不是本文主题,你可以自行搜索一下。分割字符串的函数可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void SplitStr(CString input, CStringArray &output, char division)
//输入字符串为input,字符串数组output保存分割后结果,division为分割符
{
    output.RemoveAll();   //清空数组
    for(int i=0;i<input.GetLength();i++)  
    {  
        if(input.GetAt(i)== division)  
        {  
            output.Add(input.Left(i));         //去掉右边  
            for(int j=0;j<(output.GetSize()-1);j++)  
            {  
                output[output.GetSize()-1] = output[output.GetSize()-1].Right(output[output.GetSize()-1].GetLength()-output[j].GetLength()-1);   //去掉左边  
            }  
        }      
   }  
}

灵活利用CString封装的一些方法可以让你省时省力,从这个函数中就可以很好的体现出来。使用该函数对字符串分割后可以用output.GetAt(i)的方式获得分割后的子串。

本文开始时的文本数据经过处理后显示在程序中是这样的:

处理后数据

基本上就这样了,Pavel还在努力学习MFC中,此文旨在和新手们分享一下学习所得,老鸟们还请多多指教~~