string与Cstring字符串类型转换和其他操作总结

  • CString转换为string

    static string toString(CString cs);

string StringAbout::toString(CString cs) 
{
#ifdef _UNICODE

	//如果是unicode工程
	USES_CONVERSION;
	std::string str(W2A(cs));
	return str;
#else
	//如果是多字节工程 
	std::string str(cs.GetBuffer());
	cs.ReleaseBuffer();
	return str;

#endif // _UNICODE 
}
  •     //string转换为CString

    static CString toCString(string str) ;

CString StringAbout::toCString(string str) 
{
#ifdef _UNICODE
	//如果是unicode工程
	USES_CONVERSION; CString s(str.c_str());
	CString ans(str.c_str());
	return ans;
#else
	//如果是多字节工程 
	//string 转 CString
	CString ans;
	ans.Format("%s", str.c_str());
	return ans;
#endif // _UNICODE  
}
  •     //CString转换为char*

    static char*   toCharX(CString cs);

char* StringAbout::toCharX(CString cs)
{
	const size_t strSize=(cs.GetLength()+1)*2;
	char* pstr=new char[strSize];
	size_t sz=0;
	wcstombs_s(&sz,pstr,strSize,cs,_TRUNCATE);
	return pstr;
}
  •     //修改文件类型,替换文件后缀

    static CString ReplacePostFix(string path,string post);

CString StringAbout::ReplacePostFix(string path,string post)
{
	int pos=path.find(".");
	string preStr=path.substr(0,pos+1);
	preStr+=post;
	CString mres=StringAbout::toCString(preStr);
	return mres;
}
  •     //修改文件名

    static CString ChangeFileName(string path,string post);

CString StringAbout::ChangeFileName(string path,string post)
{
	int pos=path.find(".");
	string preStr=path.substr(0,pos);
	preStr+=post;
	path=path.substr(pos,path.length()-1);
	preStr+=path;
	CString mres=StringAbout::toCString(preStr);
	return mres;
}
  •     //判断路径最后是否带有斜杆,如果没有斜杆加上

    static CString  IsWithLastDiagonalbar(CString cstr);

CString StringAbout::IsWithLastDiagonalbar(CString cstr)
{
	string m_str=toString(cstr);
	int pos=m_str.rfind("\\");
	if (pos<m_str.length()-1)
	{
		m_str+="\\";
	} 
    CString res;
	res=toCString(m_str);
	return res;
}
  •     //路径中的文件

    static string MReplaceFile(string path,string filename);

string StringAbout::MReplaceFile(string path,string filename)
{
	int pos=path.rfind("\\");
	string preStr=path.substr(0,pos+1);
	preStr+=filename;
	//CString mres=StringAbout::toCString(preStr);
	return preStr;
}
  •     //获得文件路径中的文件名

    static string GetFileFromPathString(string path);

std::string StringAbout::GetFileFromPathString(string path)
{
	int pos=path.rfind("\\");
	string postStr=path.substr(pos+1,path.length()-pos);
	return postStr;
}

源代码:

**.h

#pragma once

#include <string>

using namespace std;

class StringAbout

{

public:

	StringAbout(void);

	~StringAbout(void);

public:

	//CString转换为string

	static string toString(CString cs);

	//string转换为CString

	static CString toCString(string str);

	//CString转换为char*

	static char*   toCharX(CString cs);

	//CString转换位char*
	static CString CharXToCStr(char* mch);
	//string转换位char*
	static string  CharXToStr(char* mch);

	//修改文件类型,替换文件后缀

	static CString ReplacePostFix(string path, string post);

	//修改文件名

	static CString ChangeFileName(string path, string post);

	//判断路径最后是否带有斜杆,如果没有斜杆加上

	static CString  IsWithLastDiagonalbar(CString cstr);

	//路径中的文件

	static string MReplaceFile(string path, string filename);

	//获得文件路径中的文件名

	static string GetFileFromPathString(string path);

	static std::string WStringToString(const std::wstring &wstr);

	static std::wstring String2WString(const std::string& s);

};


**.cpp


#include "StdAfx.h"

#include "StringAbout.h"



StringAbout::StringAbout(void)

{

}





StringAbout::~StringAbout(void)

{

}

string StringAbout::toString(CString cs)

{

#ifdef _UNICODE



	//如果是unicode工程

	USES_CONVERSION;

	std::string str(W2A(cs));

	return str;

#else

	//如果是多字节工程 

	std::string str(cs.GetBuffer());

	cs.ReleaseBuffer();

	return str;



#endif // _UNICODE 

}

//CString转换位char*
CString StringAbout::CharXToCStr(char* mch)
{
#ifdef _UNICODE
	CString mcstr;
	mcstr = (CString)mch;
	return mcstr;
#else
	CString mcstr;
	mcstr = (CString)mch;
	return mcstr;
#endif
}

//string转换位char*
string  StringAbout::CharXToStr(char* mch)
{
#ifdef _UNICODE
	string mcstr;
	mcstr = (string)mch;
	return mcstr;
#else
	string mcstr;
	mcstr = (string)mch;
	return mcstr;
#endif
}

CString StringAbout::toCString(string str)
{

#ifdef _UNICODE

	//如果是unicode工程

	USES_CONVERSION; CString s(str.c_str());

	CString ans(str.c_str());

	return ans;

#else

	//如果是多字节工程 

	//string 转 CString

	CString ans;

	ans.Format("%s", str.c_str());

	return ans;

#endif // _UNICODE  

}

CString StringAbout::ChangeFileName(string path, string post)

{

	int pos = path.find(".");

	string preStr = path.substr(0, pos);

	preStr += post;

	path = path.substr(pos, path.length() - 1);

	preStr += path;

	CString mres = StringAbout::toCString(preStr);

	return mres;

}

CString StringAbout::ReplacePostFix(string path, string post)

{

	int pos = path.find(".");

	string preStr = path.substr(0, pos + 1);

	preStr += post;

	CString mres = StringAbout::toCString(preStr);

	return mres;

}



std::string StringAbout::GetFileFromPathString(string path)

{

	int pos = path.rfind("\\");

	string postStr = path.substr(pos, path.length() - pos);

	return postStr;

}



string StringAbout::MReplaceFile(string path, string filename)

{

	int pos = path.rfind("\\");

	string preStr = path.substr(0, pos + 1);

	preStr += filename;

	//CString mres=StringAbout::toCString(preStr);

	return preStr;

}



char* StringAbout::toCharX(CString cs)

{

	const size_t strSize = (cs.GetLength() + 1) * 2;

	char* pstr = new char[strSize];

	size_t sz = 0;

	wcstombs_s(&sz, pstr, strSize, cs, _TRUNCATE);

	return pstr;

}



CString StringAbout::IsWithLastDiagonalbar(CString cstr)

{

	string m_str = toString(cstr);

	int pos = m_str.rfind("\\");

	if (pos<m_str.length() - 1)

	{

		m_str += "\\";

	}

	CString res;

	res = toCString(m_str);

	return res;

}



std::string StringAbout::WStringToString(const std::wstring &wstr)

{

	std::string str;

	int nLen = (int)wstr.length();

	str.resize(nLen, ' ');

	int nResult = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wstr.c_str(), nLen, (LPSTR)str.c_str(), nLen, NULL, NULL);

	if (nResult == 0)

	{

		return "";

	}

	return str;

}



std::wstring StringAbout::String2WString(const std::string& s)

{

	std::string strLocale = setlocale(LC_ALL, "");

	const char* chSrc = s.c_str();

	size_t nDestSize = mbstowcs(NULL, chSrc, 0) + 1;

	wchar_t* wchDest = new wchar_t[nDestSize];

	wmemset(wchDest, 0, nDestSize);

	mbstowcs(wchDest, chSrc, nDestSize);

	std::wstring wstrResult = wchDest;

	delete[]wchDest;

	setlocale(LC_ALL, strLocale.c_str());

	return wstrResult;

}








 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值