//连接十个以内的字符串
CString ConnectionString(CString str1, CString str2, CString str3 =_T(""), CString str4 =_T(""), CString str5 =_T(""), CString str6 =_T("") , CString str7 =_T(""), CString str8 =_T(""), CString str9 =_T(""), CString str10 =_T(""))
{
CString strTemp; strTemp += str1.GetString();
strTemp += str2.GetString();
strTemp += str3.GetString();
strTemp += str4.GetString();
strTemp += str5.GetString();
strTemp += str6.GetString();
strTemp += str7.GetString();
strTemp += str8.GetString();
strTemp += str9.GetString();
strTemp += str10.GetString(); return strTemp;
}
这是在VS2005下写的,但在VC6下不能编译通过。GetString()函数在VC6中没有定义。谁能帮我改一下此函数,让其在VC6下实现相同功能。完全实现者给100分。
解决方案 »
- MFC如何去掉对话框的关闭按钮?
- CSerialPort类 ReadFile() Failed with the following error
- 如何设置两个控件的显示顺序
- 手动添加clistctrl控件遇到的怪问题
- C/S模式下winsock多客户端通信?
- 急~!!怎么样打开一个目录下的多个文件?
- 请大家建议一下,买一款性价比比较高的数据相机。
- 做过网关编程的兄弟请进,帮忙解惑.
- 为什么调用StretchDIBits()函数会减少系统可用内存?
- 半价转让经典VC新书
- 如何使用VC弹出U盘?
- 我在程序中调用一个命令行程序,用ShellExecute或CreateProcess方式,会出来一个dos窗口,请问我如何得到这个窗口的句柄?不用FindWin
CString strTemp;
strTemp += str1;
strTemp += str2;
strTemp += str3;
strTemp += str4;
strTemp += str5;
strTemp += str6;
strTemp += str7;
strTemp += str8;
strTemp += str9;
strTemp += str10;
return strTemp;
}
#include<string>
using namespace std;
string ConnectionString(string str1, string str2, string str3, string str4, string str5, string str6, string str7, string str8, string str9, string str10)
{
string strTemp; strTemp += str1;
strTemp += str2;
strTemp += str3;
strTemp += str4;
strTemp += str5;
strTemp += str6;
strTemp += str7;
strTemp += str8;
strTemp += str9;
strTemp += str10; return strTemp;
}
CString strTemp;
strTemp.Format("%s%s%s%s%s%s%s%s%s", str1,str2,str3,str4,str5,str6,str7,str8,str9,str10);
2、俺不明白为什么CString直接+为什么不行。
3、函数形参直接使用类,会导致类的的构造和析构,效率低下,建议使用指针。
{
return str1+str2+str3+str4+str5+str6+str7+str8+str9+str10;
}
楼上说得没错,CString确实重载了很多运算符,具体可以查看MSDN,上边的函数我试过,可以的。
GetBuffer用法大致这样:
CString str1 = "1234",str2;
str2 = str1.GetBuffer(str1.Getlength()),
CString strComboBoxItemTitle; CString strAnalogSensorName(iterAnalogSensor->GetAnalogSensorName());
CString strAnalogSensorID(iterAnalogSensor->GetAnalogSensorID()); strComboBoxItemTitle +=strAnalogSensorName;
strComboBoxItemTitle += _T("(");
strComboBoxItemTitle += strAnalogSensorID;
strComboBoxItemTitle += _T(")");
执行结构为()。改为以下:strComboBoxItemTitle += strAnalogSensorName.GetString();
strComboBoxItemTitle += _T("(");
strComboBoxItemTitle += strAnalogSensorID.GetString();
strComboBoxItemTitle += _T(")");
结果正确,所以写了函数,以后在VC6下改代码,不必每一处都改。当然 CString重载了+。如果CString str1 ,str2; str1+str2是可以的实现。
我的代码问题好像涉及到了CSimpleString这么一个类。
我这样试过,不行,我的字符串为"1".使用GetBuffer(str.Getlength())后结果为"1 "后边莫名加了好多空格。
str2 = str1.GetBuffer(str1.Getlength()),
不要用getbuffer直接str2 = str1;
VC05注意是否使用UNICODE
strTemp += str1;
....
return strTemp;直接加就可以。
---------------------------------------
在VC6中没有定义GetString()函数,看来你是想把CString里存的字符串取出来吧,在你的函数里没有这个必要。
如果你在其他的应用非要取出字符串的实体的话,可以通过下面的三种方法的其中一种。比如,设某一个窗口的标题。
pWnd->SetWindowText(strText);
pWnd->SetWindowText((LPCTSTR)strText);
pWnd->SetWindowText(strText.GetBuffer(0));
看来你们是没有碰到过这问题。
在网上查到过这个问题,他也是.GetString() 解决的。
这个问题很明确是要GetBuffer()来解决。
还是自己研究吧。
strTemp.Format("%s%s%s%s%s%s%s%s%s", str1,str2,str3,str4,str5,str6,str7,str8,str9,str10); 这样解决问题了,谢谢大家。
你意思是说把CString参数变成指针,我以为用引用更好,不会让人在传值的时候还得加&。不方便。
我不是不考虑性能,我上边说过。只是为了以后在VC6下改代码方便,不用每一处都改。
性能
我没到那种追求性能的境界,我毕业参加工作10天左右。对我来说,完成工作更重要。
你无语,就去无语吧