Kezdőoldal » Számítástechnika » Programozás » C++ Tömb hosszát hogyan...

C++ Tömb hosszát hogyan kérdezem le?

Figyelt kérdés

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?



2014. ápr. 17. 19:52
1 2
 1/13 anonim ***** válasza:
51%
strlen()
2014. ápr. 17. 19:54
Hasznos számodra ez a válasz?
 2/13 A kérdező kommentje:
Köszönöm a tippet, utánaolvastam de ez így kevés, amit találtam nem működik
2014. ápr. 17. 20:06
 3/13 A kérdező kommentje:
Talán az is baj, hogy nincs lezáró karakterem? Hogyan tudnék lezáró karaktert illeszteni a végére, hogyan alakítsam át a programom?
2014. ápr. 17. 20:07
 4/13 anonim ***** válasza:
100%

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.

2014. ápr. 17. 20:08
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:

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?

2014. ápr. 17. 20:33
 6/13 anonim ***** válasza:
if(isalpha(uzenet[k]) && uzenet[k] != 32)
2014. ápr. 17. 20:49
Hasznos számodra ez a válasz?
 7/13 anonim ***** válasza:
100%

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:

[link]

2014. ápr. 17. 21:24
Hasznos számodra ez a válasz?
 8/13 A kérdező kommentje:

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.

2014. ápr. 17. 21:39
 9/13 anonim ***** válasza:
100%

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

2014. ápr. 17. 21:48
Hasznos számodra ez a válasz?
 10/13 anonim ***** válasza:
100%

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)

2014. ápr. 17. 21:52
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!