Riadok zakonecny ciarkou C++
Riadok zakonecny ciarkou C++
Ahojte, potreboval by som radu ako by som si mohol poradit s jednou vecou. Citam nejaky subor po riadkoch, a potrebujem aby ked bola na riadku posledna ciarka, popripade este za nou medzery aby mi to hodilo false. Vedeli by ste mi niekto poradit ako na to? Dik.
Re: Riadok zakonecny ciarkou C++
Kód: Vybrať všetko
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool isCommaTerminated(string s) {
int i = s.length();
do {
i--;
if(!isspace(s[i]))
if(s[i]==',')
return true;
else
return false;
} while(i>0);
}
Rýchlejšie:
Kód: Vybrať všetko
bool isCommaTerminated(string s) {
const char * str = s.c_str();
int i = s.length();
while(str[--i]==' ') //prejde optimalizáciou
;
if(str[i]==',')
return true;
else
return false;
}
Re: Riadok zakonecny ciarkou C++
Dakujem velmi pekne za odpoved, no nejak mi nefunguje ani prva varianta ani druha (druha hlasi error) Vracia mi to false aj keby to malo byt true. Proste mam v stringu ulozene napr
toto je false
toto je true
A takto to davam do kodu
Kde by mohol byt problem? Nikde tam chybu v tej prvej variante nevidim.
Dik este raz.
Kód: Vybrať všetko
modra, cervena, fialova, Kód: Vybrať všetko
modra, cervena, fialovaA takto to davam do kodu
Kód: Vybrať všetko
if(!isCommaTerminated(string))
return false;Dik este raz.
Re: Riadok zakonecny ciarkou C++
V druhej variante som mal chybu v typoch, už je to správne. Ale v práci tej funkcie problém nie je. Tá funkcia vráti true vtedy, keď sa riadok končí na čiarku, a false ak nie. Ty berieš výstup už po negácii, preto to máš naopak. Vždy sa orientuj podľa mena funkcie: jeZakončenéČiarkou?
Re: Riadok zakonecny ciarkou C++
Super dakujem velmi pekne, funguje to
A mal by som este jednu otazocku. Ako by sa dalo spravit, ak by som dostal subor, ktory je uplne prazdny ale ma tam nejake medzery aby to vratilo true? S uplne prazdnym suborom problem nemam, tam vraciam true, no ak su tam uz medzery dava mi to false, a neviem na to prist ako to kontrolovat. Dakujem este raz.
Re: Riadok zakonecny ciarkou C++
Je tam viacero možností.
Optimalizované funkcie majú inak veľký vplyv na výkon, ale záleží na tom, či chceš preskakovať aj prázdne riadky a tabulátory. (Kompilátor musí mať zapnutú optimalizáciu (často na istej úrovni), aby si pocítil rozdiel) .
Upravená predošlá funkcia:
Kód: Vybrať všetko
bool isSpaceLine(string s) {
int i = 0;
while(isspace(s[i]))
i++;
return s.length()==i;
}
Kód: Vybrať všetko
//s optimalizáciou
bool isSpaceLine(string s) {
int i = 0;
const char * str = s.c_str();
while(str[i]==' ')
i++;
return s.length()==i;
}
Upravená predošlá funkcia:
Kód: Vybrať všetko
bool isCommaTerminated(string s) {
int i = s.length();
while(i>0 && isspace(s[--i]))
;
if(s[i]!=',')
return false;
return true;
}
Re: Riadok zakonecny ciarkou C++
Dakujem velmi pekne 