C++ Tömb hosszát hogyan kérdezem le?
Van egy char elemeket tartalmazó tömböm
char uzenet[255];
amely maximum 255 karakter befogadására képes
Ebbe a tömbbe egy egy mondatos begépelt üzenetet rögzítek.
gets(uzenet)
Minden leütött karakter a tömb egy-egy eleme.
for (k=0; k<255; k++) {
if(isalpha(uzenet[k]))
upper[k]=toupper(uzenet[k]);}
Az üzenetet nagybetűssé is kell alakítanom.
Ezek után szeretném lekérdezni hogy hány db karakter van az upper[] tömbömben.
Hogyan??
Nincs egy függvény ami ezt egyszerűen le tudja kérdezni? Vagy valahogy for ciklussal kell magam megszámolnom az elemeket, erre van valakinek vmi ötlete?
C típusú stringeknél az utolsó karakter a '\0'! Így már működni fog neked, amúgy C++-ban felesleges C típusú stringet használni amikor van normál string :)
A megfelelő include vackokat ne felejtd ki, lehet az a problémád.
Már majdnem jó ezzel:
szoveghossz=strlen(upper);
Mostmár csak arról kellene gondoskodnom az uzenet -> upper átalakításnál, hogy a space-eket kivegye, így csak betűsort tartalmazna az upper szóköz nélkül.
Ezt próbáltam, de semmit nem csinál:
for (k=0; k<255; k++) {
if(isalpha(uzenet[k]) && uzenet[k] != ' ')
upper[k]=toupper(uzenet[k]);}
Hogyan kellene kijavítani?
ez így nem lesz jó
a két tömböt ugyanazzal a ciklusváltozóval indexeled, így teljesen mindegy, hogy belerakod-e a szóközt, vagy nem, úgyis lépteted az upper indexet is, ott meg memóriaszemét lesz
C++-ban:
7-es válaszoló
Ez lehet hogy használható, de nem értem.
Ebben az esetben az strlen(nagybetus) kiadja a szövegem hosszát?
Már látom probléma hogy a string kezelést nem tanultuk így nehéz lesz átvergődnöm ezen a feladaton, aminek csak egy kis részét emeltem ki sajons.
Az strlen arra nem fog működni, mert char pointert vár.
A gets() egyébként rak lezáró nullát az üzeneted végére,
csak eddig kicsit nem azt csinálta a programod, amit kellene. (Egyébként mire fel uzenet[255]? esetleg még a 256-ot érteném, ezt nem:D)
Az átmásolásodra meg egyszerűen az a megoldás, hogy vagy kihagyod a szóközöket (de nem úgy, ahogy eddig csináltad), vagy átmásolod és szóközmentesíted az upper tömböt.
Kihagyás (C-style megoldás):
int i, j;
for(i=0, j=0; uzenet[i]; ++i) if(isalpha(uzenet[i]) && uzenet[i]!=' ') upper[j++] = toupper(uzenet[i]);
upper[j] = 0;
Valahogy így
Ezek után már mehet az strlen()
(Jav.: nem tudom, miért írtam én is a második feltételt, de az isalpha már egyből kiszűri a whitespace-t)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!