使用多维数组作为值类型在地图中读取文件

时间:2017-12-14 08:06:32

标签: c++ arrays c++11 c++14

我试图用多维数组从地图中的文件中读取。我已经写了代码,它看起来像它的工作,但如果我看看地图内容是错误的。我的代码是否有问题,是否有一个更好的解决方案bitset而不将多维数组更改为bitset? 文件内容如下所示:

a
00000000
00110000
00000011
00100000
00000000
00001000
01000000
00011000
6
11111000
00011000
...

等等 我的代码没有例外:

#include <iostream>
#include <string>
#include <bitset>
#include <map>
#include <fstream>
#include <array>


using namespace std;

void main()
{

map <char, array<array<int, 8>, 8>> tablemap;   
string sign, line;
ifstream file;

source.open("file.txt");

    while (getline(source, sign))
    {
        for (int i = 0; i < 8; i++)
        {
            getline(source, line);

            for (int j = 0; j < 8; j++)
            {
                tablemap[sign.at(0)][i][j] = static_cast<int>(line.at(j));

            }                                       
        }
    }
    source.close();     
}
system("pause");
}

2 个答案:

答案 0 :(得分:0)

让我猜一下,你读到的数据最终是例如4849,而不是01(分别)。

那是因为static_cast<int>(line.at(j))没有将数字字符转换为等价的整数。相反,你只需得到编码的字符的整数等价物(你真的不需要static_cast)。

如果查看this ASCII table(ASCII是最常见的编码),您会看到字符'1'将具有整数值49。如果你仔细观察,你会看到所有的数字都是相互跟随的,这意味着要从字符1中获取整数'1',你可以简单地从你的'0'中减去line[j] - '0'字符。与tablemap[sign.at(0)][i][j] = line[j] - '0'; 中一样。

所以你应该做的是

class OrderDetail(DetailView):
    model = Order

    def **dispatch**(self, request, *args, **kwargs):
        try:
            user_check_id = self.request.session.get("user_checkout_id")
            user_checkout = UserCheckout.objects.get(id=user_check_id)
        except UserCheckout.DoesNotExist:
            user_checkout = UserCheckout.objects.get(user=request.user)
        except:
            user_checkout = None

        obj = self.get_object()
        if obj.user == user_checkout and user_checkout is not None:
            return super(OrderDetail, self).dispatch(request, *args, **kwargs)
        else:
            raise Http404

注意:此数字到整数算术在C ++规范中指定,但仅适用于数字。即使它可以用于ASCII编码的字母,它也不是C ++标准的一部分。

答案 1 :(得分:0)

通过调用std :: stoi来更改静态强制转换,如http://en.cppreference.com/w/cpp/string/basic_string/stol

所示