C, zamiana tagów HTML na duże litery

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

C, zamiana tagów HTML na duże litery

Post autor: Dudi879 »

Głowię się nad zadaniem ze SPOJ:
Input - Na wejściu znajduje się fragment kodu HTMLowego.
Output -
Na wyjściu znajduje się kod HTML z wejścia, tyle tylko, że wszystkie tagi HTMLowe składają się z dużych liter.

Np.:

Kod: Zaznacz cały

Input:
<html>
<head>
<TITLE>To jest tytul</Title>
</head>
<body>
<b>Cos tam</b>
</body>
</html>




Output:


<HTML>
<HEAD>
<TITLE>To jest tytul</TITLE>
</HEAD>
<BODY>
<B>Cos tam</B>
</BODY>
</HTML>
Co nie tak z moim programem, co można poprawić? Mam przekroczony limit czasu.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    int i, MAX = 60;
    char line[MAX];
    char sign = 'a';    //'a' - wlaczony tryb poprawy liter, 'b' - wylaczony


    fgets(line,MAX,stdin);     // wczytywanie linii z stdin


    while(line[0] != '\n')      // Dopoki nie bedzie pustej linii
    {
        i = 0;


        while(i < strlen(line)) 
        {
            if (line[i]=='<')
            {
                sign = 'b';
                ++i;
            }
            else if(line[i]=='>')
            {
                sign = 'a';
                ++i;
            }
            else if(sign=='b' && line[i]>='a' && line[i]<='z')
            {
                line[i] -= 32;
                ++i;
            }
            else
            {
                ++i;
            }


        }


        line[ strlen(line) - 1  ] = '\0';
        printf("%s\n", line);
        fgets(line,MAX,stdin);
    }


    return 0;
}


mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Poszukaj jak powinien wyglądać warunek pobierania danych z pliku.
Masz

Kod: Zaznacz cały

while(line[0] != '\n')
a przecież w środku pliku też może być pusta linia.
Powinno raczej być

Kod: Zaznacz cały

while(!EOF)
Awatar użytkownika
Dudi879
Beginner
Posty: 106
Rejestracja: 15 września 2013, 10:47

Post autor: Dudi879 »

Juz poprawilem program na cos w ten desen:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>


int main()
{
    int i;
    const int MAX = 160;
    char line[MAX];
    bool on = 0;    // if 1 - toupper works
 
    while(fgets(line,MAX,stdin) != NULL)
    {
        for(i=0; i < strlen(line); i++)
        {
            if (line[i]=='<')
            {
                on = 1;
            }
            else if(line[i]=='>')
            {
                on = 0;
            }
 
            if(on==1)
            {
                line[i] = toupper(line[i]);
            }
        }
 
        printf("%s\n", line);
    }


    // end program with ctrl+d


    return 0;
}
ODPOWIEDZ