问题描述
我正在尝试使用C ++从文本文件中读取数据,并将每一行的字符串存储到wchar_t []或LPCWSTR中。 (这2种数据类型是我正在处理的应用程序的约束。这就是为什么我必须将数据存储在这些数据类型中的原因)
.txt文件中的数据格式例如:
abc\\def\\ghi 10
jkl\\mnopq\\rstq 20
aqq\\sdsds\\qc 30
我正在尝试逐行读取数据并将每行保存为地图的键值对,其中键的类型为LPCWSTR或wchar_t []类型,而值的类型为int类型 提取int没问题,但是问题在于读取字符串
这是我的代码:
#include<iostream>
#include<fstream>
#include<windows.h>
#include<cstdlib>
using namespace std;
int main()
{
wchar_t test1[260];
const char* s = "Hello\\ABC\\DEF";
mbstowcs(test1,s,strlen(s));
wcout<<test1<<endl;
wchar_t gr[260];
string gr_temp;
int percentage;
ifstream ifs;
ifs.open("data.txt",ifstream::in);
if (ifs.is_open()) {
while (ifs >> gr_temp >> percentage){
const char* source = gr_temp.c_str();
mbstowcs(gr,source,strlen(source));
wcout<<gr<<L" ";
cout<<percentage<<endl;
}
ifs.close();
}
return 0;
}
但是,它给出以下输出:
Hello\ABC\DEFa
abc\\def\\ghi 10
jkl\\mnopq\\rstq 20
aqq\\sdsds\\qc 30
-
我不明白为什么微小的“ a”会在输出的第一行中突然出现
-
我希望代码改为自动处理那些双斜杠,即我希望输出为:
Hello\ABC\DEF abc\def\ghi 10 jkl\mnopq\rstq 20 aqq\sdsds\qc 30
-
最好的方法是,我可以将条目写在.txt文件中而不加双斜杠,并且它们会自动处理而不检查任何转义序列。但是,由于问题不存在。 1)上面有,所以我不确定是否有可能
-
即使将
cout<<gr_temp<<endl;
添加为while循环的第一行,甚至也会输出带有双反斜杠的字符串。
我想念什么或做错什么了?
更新:
此外,当我在每个while循环的末尾使用语句std::map<LPCWSTR,int> m1
将这些键值对添加到m1[gr] = percentage;
时,然后使用print语句,它仅显示地图。
我更新的代码是:
#include<iostream>
#include<fstream>
#include<windows.h>
#include<cstdlib>
#include<map>
using namespace std;
std::unordered_map<LPCWSTR,int> m1;
int main()
{
wchar_t test1[260];
const char* s = "Hello\\ABC\\DEF";
mbstowcs(test1,strlen(source));
m1[gr] = percentage;
}
ifs.close();
}
for (auto i = m1.begin(); i != m1.end(); i++) {
wcout<< i->first << L" ";
cout<< i->second << endl;
}
return 0;
}
此代码仅在地图中添加1个元素,这是最近添加的元素。
我将代码编辑为使用unordered_map,但仍然存在相同的问题。
我进一步尝试打印地图的size()。在这两种情况下,地图m1的大小都显示为1。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)