无法忽略文本文件流中的转义符并将其存储在C ++中的wchar_t []中

问题描述

我正在尝试使用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
  1. 我不明白为什么微小的“ a”会在输出的第一行中突然出现

  2. 我希望代码改为自动处理那些双斜杠,即我希望输出为:

    Hello\ABC\DEF
    abc\def\ghi 10
    jkl\mnopq\rstq 20
    aqq\sdsds\qc 30
    
  3. 最好的方法是,我可以将条目写在.txt文件中而不加双斜杠,并且它们会自动处理而不检查任何转义序列。但是,由于问题不存在。 1)上面有,所以我不确定是否有可能

  4. 即使将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 (将#修改为@)