Witam, nie nadałem temu pytaniu kategorii "SPOJ" bo bardziej chodzi tu o ogólnie ocenę kodu, jego jakości a nie że mam jakieś problemy z sędzią i kompilacją... Ale uprzedziłem w temacie ;)
Raz na jakiś czas daje jakiś kod do oceny (chodź by tak prosty jak ten), bo zazwyczaj też wtedy dowiaduje się o ciekawych algorytmach, składni itd... Tym razem jest to zadanie z serwisu spoj. Polega ono że na wejściu mamy kod html'owy i litery po między '<' a '>' musimy zamienić na duże (czyli zawartość tagów chyba to się nazywa).
Mam taki kod w c++:
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
///----------------------------------------------------------------------------------------
using vecStr = std::vector<std::string>;
vecStr read();
void change(vecStr&);
void show(const vecStr&);
///--------------------------------------------------------------------------------------
int main(){
auto lines = read(); //wczytanie linii kodu
change(lines); //zmieniamy wygląd tagów (litery na duże)
show(lines); //pokazujemy zmieniony kod
return 0;
}
///-----------------------------------------------------------------------------------------
vecStr read(){ //wczytanie danych
vecStr vec;
std::string temp;
while(std::getline(std::cin,temp)){
vec.push_back(temp);
}
return vec;
}
///------------------------------------------------------------------------------------------------
void change(vecStr& lines){ //algorytm do zamieniania wielkości liter pomiędzy <>
for(auto& it : lines){ //pętla dla pojedynczych linii tekstu
bool d{false}; //czy zmieniać wielkość liter
for(auto& ch : it){ //pętla dla pojedynczych znaków w linii
if(ch=='<')
d = true;
else if(ch=='>')
d = false;
else if(d){
ch = toupper(ch); //zamiana litery na dużą
}
}
}
}
///------------------------------------------------------------------------------------------------
void show(const vecStr& lines){ //prezentacja zmienionych danych
for(const auto& it : lines){
std::cout<<it<<std::endl;
}
}
///------------------------------------------------------------------------------------------
Plik tekstowy z kodem:
<html>
<head>
<TITLE>To jest tytul</Title>
</head>
<body>
<b>Cos tam</b>
</body>
</html>
Oraz plik wsadowy dokonujący przekierowania strumienia wejściowego z pliku do programu:
@echo off
"Tagi HTML.exe" < "HTMLfile.txt"
pause > nul
Może kod programu nie jest specjalnie długi, ale może jest jakaś drobnostka do poprawienia? Zastanawiam się nad funkcją:
toupper(char);
z biblioteki cctype. Czy można ją zastąpić czymś nowszym?
Dziękuje za rady i serdecznie pozdrawiam :)