C++ mfc中,类CString如何分割开啊?
比如CStringstr是“abcdu,5,5,abcd,0”如何将逗号之间的东西提取出来放入其他字符串?如处理后,CStringa就是abcdu...
比如CString str是“abc du,5,5,abc d,0”如何将逗号之间的东西提取出来放入其他字符串?
如处理后,CString a就是abc du 展开
如处理后,CString a就是abc du 展开
5个回答
展开全部
1. 标准C中的字符串
在标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。例如:
char name[26]="This is a C-style string"; 或者
char *name="This is a C-style string";
类型的字符串以\0为结束标记,所占内存是实际子符长度+1,其初始化和赋值都要逐个字符的赋值,修改不辨,粒度太小,很不直观,是程序员分散了一些软件的高级层面问题,如算法,抽象数据类型或软件构架。char *没有构造函数,仅能由指针赋值,而且是一个极其危险的操作,在声明char * 的时候如果没有赋初值,建议先初始化为NULL,以免出现悬浮指针或者指向地址不明的指针,否则,出错会让你很爽!
标准C中是没有string类型,但是在C中有string.h头文件,需要注意的是此string.h中的string 非彼string,<string.h>头文件中定义了一些我们经常用到的操作字符串的函数,如复制函数strcpy,连接字符串strcat,比较字符串strcmp,这些函数的操作对象都是指向char *的字符串。
2.标准C++中的string类
C++支持C风格字符串的使用,而且引入了string类的概念,string为标准模板类STL定义的字符串,几乎可以从所有的字符串构造出来。
string字符串类的都文件是<string>,并且要和using namespace std; 一起使用。头文件<string>和头文件<string.h>没有任何关系,前者是标准C++中的模板库类,后者是标准C中的包含常用C字符串处理函数的头文件,如strcmp,前者并非是后者的升级版。
要深刻理解标准C++中string是一个类, 如在标准C中定义如下:char * pt=NULL; 这无疑是正确的,但是在标准C++中定义 string *pt=NULL;这样做编译器不会有警告和错误,但是运行是就会有异常。这是因为string作为一个类,定义类的对象时要调用其构造函数的,上面的例子既没有调用其构造函数,还把指针赋值为NULL,很明显就会出错的。正确的 方法是是new操作符,C++中的new不同于C中的malloc, new不但会分配一块内存,还调用类的构造函数。string *pt=new("this is a c++-style string"); 或者不用指针 string str;系统自动调用默认的构造函数,构造一个string类的对象。
3. MFC中的CString类。
MFC中的字符串类是CString,封装了string的东西,并增加了一些接口,在功能上完全兼容string类,而一些标准的C/C++不能直接对CString类进行操作,CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。CString和string提供的接口方法不同,对char*的转换也不同。下
在标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。例如:
char name[26]="This is a C-style string"; 或者
char *name="This is a C-style string";
类型的字符串以\0为结束标记,所占内存是实际子符长度+1,其初始化和赋值都要逐个字符的赋值,修改不辨,粒度太小,很不直观,是程序员分散了一些软件的高级层面问题,如算法,抽象数据类型或软件构架。char *没有构造函数,仅能由指针赋值,而且是一个极其危险的操作,在声明char * 的时候如果没有赋初值,建议先初始化为NULL,以免出现悬浮指针或者指向地址不明的指针,否则,出错会让你很爽!
标准C中是没有string类型,但是在C中有string.h头文件,需要注意的是此string.h中的string 非彼string,<string.h>头文件中定义了一些我们经常用到的操作字符串的函数,如复制函数strcpy,连接字符串strcat,比较字符串strcmp,这些函数的操作对象都是指向char *的字符串。
2.标准C++中的string类
C++支持C风格字符串的使用,而且引入了string类的概念,string为标准模板类STL定义的字符串,几乎可以从所有的字符串构造出来。
string字符串类的都文件是<string>,并且要和using namespace std; 一起使用。头文件<string>和头文件<string.h>没有任何关系,前者是标准C++中的模板库类,后者是标准C中的包含常用C字符串处理函数的头文件,如strcmp,前者并非是后者的升级版。
要深刻理解标准C++中string是一个类, 如在标准C中定义如下:char * pt=NULL; 这无疑是正确的,但是在标准C++中定义 string *pt=NULL;这样做编译器不会有警告和错误,但是运行是就会有异常。这是因为string作为一个类,定义类的对象时要调用其构造函数的,上面的例子既没有调用其构造函数,还把指针赋值为NULL,很明显就会出错的。正确的 方法是是new操作符,C++中的new不同于C中的malloc, new不但会分配一块内存,还调用类的构造函数。string *pt=new("this is a c++-style string"); 或者不用指针 string str;系统自动调用默认的构造函数,构造一个string类的对象。
3. MFC中的CString类。
MFC中的字符串类是CString,封装了string的东西,并增加了一些接口,在功能上完全兼容string类,而一些标准的C/C++不能直接对CString类进行操作,CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。CString和string提供的接口方法不同,对char*的转换也不同。下
2013-08-30
展开全部
void printStr (CString str) //输出分割后的子字符串的函数
{
CString * strArray ;
strArray = SplitString(str,';');
}
追问
谢谢,我之前也用的这个函数,但是字符串里有空格,sscanf读到空格就停了,读不到后面了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果VC版本大于6.0(包括之后所有VS版本),使用CString::Tokenize
如果是VC6,那么:
void StringSplit(CString source, CStringArray& dest, char division)
{
dest.RemoveAll();
for(int i=0;i< source.GetLength();i++)
{
if(source.GetAt(i)== division)
{
dest.Add(source.Left(i)); //去掉右边
for(int j=0;j 〈 (dest.GetSize()-1);j++)
{
dest[dest.GetSize()-1] = dest[dest.GetSize()-1].Right(dest[dest.GetSize()-1].GetLength()-dest[j].GetLength()-1); //去掉左边
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sscanf("abc du,5,5,abc d,0","%s,%s,%s,%s,%s",s1,s2,s3,s4,s5);
s1,s2,s3,s4,s5为放入的字符串
s1,s2,s3,s4,s5为放入的字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用AfxExtractSubString函数,例如:
CString strSource = "abc du,5,5,abc d,0";
CString str1;
CString str2;
CString str3;
CString str4;
CString str5;
AfxExtractSubString(str1,strSource,0,',');
AfxExtractSubString(str2,strSource,1,',');
AfxExtractSubString(str3,strSource,2,',');
AfxExtractSubString(str4,strSource,3,',');
CString strSource = "abc du,5,5,abc d,0";
CString str1;
CString str2;
CString str3;
CString str4;
CString str5;
AfxExtractSubString(str1,strSource,0,',');
AfxExtractSubString(str2,strSource,1,',');
AfxExtractSubString(str3,strSource,2,',');
AfxExtractSubString(str4,strSource,3,',');
追问
谢谢。。感觉用这个函数能解决问题..
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询