• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwanie liczby w tekście

0 głosów
484 wizyt
pytanie zadane 14 września 2022 w C i C++ przez RockySniper Nowicjusz (140 p.)

Witam was serdecznie. Mam problem z jednym zadaniem. Mianowicie z danej komendy chciałbym wyciągnąć cyfry. Przykładowo, jeśli komenda brzmi "TEST04" to chciałbym, aby zostały wyciągnięte cyfry 0 oraz 4 i potem przeniesione do zmiennej jako 4. Oczywiście mogą być też dwie cyfry jak np.: 1, 2 i wtedy robimy 12. Wynik jest przechowywany w zmiennej liczba. Niestety w moim kodzie poniżej zostaje wyciągnięta tylko ostatnia cyfra oraz jest zapisywana w formacie ASCI. Co muszę zrobić żeby zostały wyciągnięte dwie cyfry oraz zostały zapisane w normalnym formacie?

int main()
{
    		
	    char * komenda = "KOMENDA01";
		int dlugosc = strlen(komenda);
		int liczba;
	    for (int i = 0; i < dlugosc; i++)
	    {
	        if (isdigit(komenda[i])){
	            liczba = komenda[i];
	        }
	    }
	    printf("%d", liczba);

    return 0;
}

 

komentarz 15 września 2022 przez VBService Ekspert (256,580 p.)

BTW, można też

if (isdigit(komenda[i]))
if (komenda[i] >= 48 && komenda[i] <= 57)

 

2 odpowiedzi

0 głosów
odpowiedź 14 września 2022 przez GodDoesntPlayDice Użytkownik (520 p.)
int main()
{
    char * command = "KOMENDA123456";
    int value = 0;
    
    for(int i = 0; command[i] != '\0'; i++)
    {
        if(isdigit(command[i]))
        {
            value *= 10;
            value += command[i] - '0';
        }
    }
    
    printf("%d", value);
 
    return 0;
}

 

0 głosów
odpowiedź 15 września 2022 przez mokrowski Mędrzec (158,960 p.)

Jeśli chcesz/powinieneś się trochę męczyć, to wystarczy parsować napis "od tyłu":

#include <iostream>
#include <cstdlib>
#include <cstring>

int main() {
	const char * command = "COMMAND964";
	auto len = strlen(command);
	auto value = 0;
	auto mul = 1;
	while (len-- && isdigit(command[len])) {
		const char c = command[len];
		value += atoi(&c) * mul;
		mul *= 10;
	}
	std::cout << value << '\n';
}

Oczywiście ma to swoje ograniczenia. W wątku nie ma jednak pełnej specyfikacji problemu i przypadków brzegowych :)

Podobne pytania

0 głosów
1 odpowiedź 364 wizyt
pytanie zadane 24 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,580 p.)
0 głosów
1 odpowiedź 303 wizyt
pytanie zadane 22 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,580 p.)
0 głosów
3 odpowiedzi 477 wizyt
pytanie zadane 19 marca 2016 w C i C++ przez gryzon Początkujący (480 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...