我试图用多维数组从地图中的文件中读取。我已经写了代码,它看起来像它的工作,但如果我看看地图内容是错误的。我的代码是否有问题,是否有一个更好的解决方案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");
}
答案 0 :(得分:0)
让我猜一下,你读到的数据最终是例如48
和49
,而不是0
和1
(分别)。
那是因为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
所示