Газета Uva Online судья 11340. Обработка персонажей не-ascii - PullRequest
0 голосов
/ 29 февраля 2020

Я пытался решить следующую проблему на интернет-судье Uva Газета 11340

Короче говоря, проблема состоит в том, чтобы найти значение статьи в соответствии с таблицей цен, в которой цены отдельных символов приведены. Все символы, которые появляются в статье, а не в таблице цен, имеют цену 0. Я пытался ответить на этот вопрос несколько раз, что казалось бы легким, но в итоге получился неправильный ответ, пока я не нашел решение на github Solution .

В разделе отладки задачи есть примечания к вопросу, которые я забыл просмотреть.

В UVa Online есть несколько двоичных (не ASCII) символов Вклад судьи по этой проблеме. Они встречаются только в статье, а не в таблице.

Я принял свое собственное решение, когда использовал преобразование типов в (int) c, как в следующем фрагменте кода из решения github выше * 1016. *

for (int i = 0; i < m; i++) {   //  reads m lines of the article 
            unsigned char c;       // character by character and compute the total
            while ((c = cin.get()) != '\n') {
                total += paychit[(int) c];
            }
        }

Я не совсем понимаю, что делает приведение типов здесь (unsigned char to int). Я попытался прочитать с этого сайта несколько вопросов о не-ascii символах в c ++, но это не помогло. Простой запрос Google для диапазона не-ascii символов указывает мне на статью о том, что это 0-255, это правда? и что означает бинарный префикс для не-ascii символов. Пожалуйста, помогите мне понять, что здесь происходит.

Мое собственное решение проблемы:

#include<string>
#include<array>
#include<iomanip>

using namespace std;

int main(){
    int N,K,M,p;
    double x;
    unsigned char c;
    cin >> N;
    getchar();
    array<int,256> price;
    array<int,256> count;
    cout << fixed << setprecision(2);
    while(N--){
        cin >> K;
        getchar();
        price.fill(0);
        count.fill(0);
        while(K--){
            cin >> c >> p;
            getchar();
            price[(int) c] = p;
        }
        cin >> M;
        getchar();
        while(M--) while((c = getchar()) != '\n') count[(int) c]++;
        x = 0.00;
        for(int i=0; i < 128; i++) x+=(count[i] * price[i]);
        cout << x / 100 << "$" << endl;
    }
    return 0;
}
...