[英]Problem: How to convert CString into const char * in C++ MFC
[英]How to convert a CString to an array of strings in MFC C++?
在 MFC C++ 中,我试图逐行读取文本,并将其显示在 listcontrol 中。
文本文件的格式为:名称地址 Rollno Class
所以文本将包含
约翰英格兰 25 4
等等。
我想在列表控件中显示它们。
但是,我使用此代码阅读文件
if (myFile.Open(_T("c:\\Users\\blabla\\Desktop\\bla.txt"), CFile::modeRead))
{
while (myFile.ReadString(strLine))
{
strMsg += strLine + '\n';
int lengtha = (strLine).GetLength();
//SetDlgItemText(IDC_LIST3, strLine);
char myString[256];
AfxMessageBox(strLine, MB_ICONINFORMATION);
//How do I iterate through strLine?
}
}
else
{
AfxMessageBox(_T("Nope"));
}
在上面,strLine 将打印“John England 25 4”,我想将其转换为类似 ["John", "England", "25", "4"] 的数组,然后遍历该数组以插入 listcontrol。
我是 MFC C++ 的新手,我似乎根本不明白该怎么做。 如果有人可以提供帮助,那就太好了。
编辑:我看到你可以标记化,所以这就是我到目前为止提出的
void CMFCTask2Try2Dlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CStdioFile myFile;
CString strLine;
CString strMsg;
if (myFile.Open(_T("c:\\Users\\blabla\\Desktop\\nana.txt"), CFile::modeRead))
{
while (myFile.ReadString(strLine))
{
strMsg += strLine + '\n'
char myString[256];
CAtlString str(strLine);
CAtlString resToken;
int curPos = 0;
resToken = str.Tokenize(_T(" "), curPos);
int i = 0;
int nItem;
while (resToken != _T(""))
{
_tprintf_s(_T("Resulting token: %s\n"), resToken);
AfxMessageBox(resToken, MB_ICONINFORMATION);
nItem = mcontrolz.InsertItem(i, resToken);
resToken = str.Tokenize(_T(" "), curPos);
break;
//Here resToken prints
}
}
}
else
{
AfxMessageBox(_T("Nope"));
}
//myFile.Close();
}
所以如果我的文本文件只有
hey how are you
在这行代码中
AfxMessageBox(resToken, MB_ICONINFORMATION);
消息框只会给我“嘿”到目前为止效果很好,但如果我的文本文件是
hey how are you
hi how are you
这里的resToken AfxMessageBox(resToken, MB_ICONINFORMATION); 在这一行将给出两个消息框警报,一个是嘿,一个是嗨,不知道为什么它给了我。 有人可以帮我解决这个问题吗?
CString::Tokenize
可用于在任意分隔符处拆分字符串。 在您的用例中,您将传递_T(" ")
作为分隔符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.