C++ stringről, hogy tudom meg, hogy csak számot tartalmaz vagy nem?
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
#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'
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.
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.
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'; });
}
Ü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'; });
}
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.
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!