Text Editor (editor) OIS 2019


#1

La mia soluzione, almeno sul computer funziona con i Samples Tasks, mentre sul sito funziona solo con i SubTasks3, dove non c’è il Grassetto. Immagino quindi che il problema sia la libreria ctype.h… ma non so come fare :frowning:

Edit: ho risolto, come ho fatto con italic l’ho rifatto con bold. Avevo già la soluzione sottomano…

#include <iostream>
#include <cstdio>
#include <ctype.h>

using namespace std;

int main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    unsigned long int N;
    cin >> N;
    unsigned char text[N];
    unsigned long int italic[N];
    unsigned long int bold[N];
    for (int i = 0; i < N; i++){
        cin >> text[i];
        bold[i] = isupper(text[i]);
        if (text[i] == 'I' || text[i] == 'i')
            italic[i] = 1;
        else
            italic[i] = 0;
    }
    int b = 0;
    int it = 0;
    int Tot = 0;
    for (int i = 0; i < N; i++){
        if (bold[i] == 1 && b < 3)
            b++;
        else if (bold[i] == 0)
            b = 0;
        if(b == 1)
            Tot++;
    }
    for (int i = 0; i < N; i++){
        if (italic[i] == 1 && it < 3)
            it++;
        else if (italic[i] == 0)
            it = 0;
        if(it == 1)
            Tot++;
    }
    cout << Tot << endl;;
}

#2

Ho approfondito la questione. La documentazione per isupper riporta:

o equivalentemente, a seconda della fonte,

Il problema deriva quindi dal memorizzare il risultato di isupper in un vettore di interi. Ad esempio sul mio computer viene memorizzato 256 per le lettere maiuscole (che è effettivamente interpretabile come true, ma solo dopo un casting). Nel resto del codice tu confronti l’intero memorizzato con l’intero 1 e questo confronto produce effettivamente false.

Morale della favola: è sufficiente cambiare il codice dichiarando bold come vettore di bool. A quel punto il risultato di isupper verrà castato implicitamente da int a bool e anche il resto delle operazioni funzioneranno correttamente.

P.S: Come vedi, a volte si impara qualcosa anche andando a fondo di una questione semplice :wink: