Kezdőoldal » Számítástechnika » Programozás » C++ stringről, hogy tudom...

C++ stringről, hogy tudom meg, hogy csak számot tartalmaz vagy nem?

Figyelt kérdés
Ha jól tudom, nincs olyan függvény rá semelyik libben. Hogy kellene vizsgálnom a stringeket?

2016. márc. 18. 20:34
 1/8 anonim ***** válasza:

Bár én c# tudok, e szerintem visual c++-ban is ugyanígy lenne a program(str[] a megadott változó):

bool tartalmaz = false;

for(int i = 0; 1 < str.Length; i++){

if(str[i] < '9' && str[i] > '0') tartalmaz = true;

}

Ezután a tartalmaz változóban el lesz tárolva, hogy van-e benne szám vagy nincs

2016. márc. 18. 20:57
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

#1: Egyrészt nem az volt a kérdés, hogy tartalmaz-e számjegyet, hanem hogy csal azokat tartalmaz-e

Másrészt még a szám taratalmazás is hibás, hiszen csak 1-8-ig lévő számjegyekre működk. <= és >=-t kellett volna használni.

De tény, hogy ezzel a módszerrel megoldható amit a kérdező szeretne, csak picit javitani kell rajta. Azt vizsgálni, hogy tartalmaz-e nem számjegyet, azaz amikor ch > '9' || ch < '1'

2016. márc. 18. 22:21
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

Sajnos csak a C nyelvet ismerem, de abban így:

#include <stdbool.h>

#include <ctype.h>


bool is_digit_only(char* str) {

.. if (str == NULL) return false;

..

.. int i;

.. for (i = 0; i < strlen(str); i++) {

.. .. if (!isdigit(str[i])) return false;

.. }

.. return true;

}


Kérdés, hogy milyen számrendszerbeli számjegyről van szó. Én 10-es számrendszerbelire vizsgáltam.

2016. márc. 18. 22:29
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

[link]

Ha jól értelmezem a kérdést.

G.

2016. márc. 18. 23:32
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Komolyan meglep, hogy senki nem használ while ciklust egy keresőalgoritmushoz....


bool is_number(string str)

{

>>>>int i=0;

>>>>bool isNumber = true;

>>>>while (i<str.length() && isNumber)

>>>>{

>>>>>>>>//isNumber = isdigit(str[i]);

>>>>>>>>isNumber= (str[i]<='9' && str[i]>='0');

>>>>>>>>i++;

>>>>}

>>>>return isNumber;

}


Lehet használni az isdigit-et annak meghatározására, hogy az adott karakter szám-e, de szerintem alternatívaként az is tökéletesen megfelel, hogy '0' és '9' között van (inclusive)


#3-nak meg azt javasolnám, hogy törekedjen a szép kódra, ciklusból visszatérni nem szép.

2016. márc. 19. 14:10
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

Meglep, hogy senki nem használja az STL-t, még a végén tényleg szép lenne a kód.


bool IsNumber(const std::string& s)

{

return std::all_of(std::cbegin(s), std::cend(s), [](const auto ch) { return ch >= '0' && ch <= '9'; });

}

2016. márc. 19. 14:37
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

Üres string kezelése lemaradt.


bool IsNumber(const std::string& s)

{

return std::empty(s) ? false : std::all_of(std::cbegin(s), std::cend(s), [](const auto ch) { return ch >= '0' && ch <= '9'; });

}

2016. márc. 19. 14:38
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

Igen, az már a nagyon fényesre polírozott kategória, bár akkor már ha úgyis ilyeneket használunk, mint STL, akkor az intervallum-ellenőrzés helyett az isdigit-et is lehetne használni, és máris gyönyörűséges :D


Ha viszont kézzel akarunk egy 'primítívebb' algoritmust írni, akkor a fentebb említett példa nevezhető talán a legszebbnek.

2016. márc. 19. 15:36
Hasznos számodra ez a válasz?

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!