Znajdywanie liczb w stringu

Znajdywanie liczb w stringu
C0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0

Czy jest jakaś gotowa funkcja która znajduje liczby w stringu? np.

Kopiuj
string m("Ucze sie stringa 1 miesiac czyli dokladnie 30 dni");

czyli liczby 1 i 30

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

Wyrażenia regularne? Nie wiem jakie funkcje za to odpowiadają w C++, ale na pewno wujek google zna odpowiedź

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
1

Jest, ale pojawi się w standardzie dopiero w C++11 a mianowicie wyrażenia regularne. Możesz użyć Boost::RegExp lub zobaczyć czy twój kompilator już ma zaimplementowane je w bibliotece standardowej.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1574
0

A można sprawdzić przecież czy dany znak jest liczbą czy nie.

C0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0
Kopiuj
void func(string text){
    string::iterator it;
    short n=0;
    std::getline(std::cin, text)
    for(it = text.begin(); it < text.end(); it++)
           if('1' <= *it <= '9') n++;
    printf("%hd", n);
}

problem taki, że dla string text("Ula ma 2 koty i 3 psy") zamiast wypisać na output 2, wyświetla 21 :/

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
1

if('1' <= *it <= '9')

Za takie coś powinni cię rozstrzelać.

Ma być:

Kopiuj
if (('1' <= *it) && (*it <= '9'))
vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
1
Sarrus napisał(a)

Wyrażenia regularne? Nie wiem jakie funkcje za to odpowiadają w C++, ale na pewno wujek google zna odpowiedź

Boost::Xpressive - http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive.html
Boost::Regex - http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html
MS Greta - http://research.microsoft.com/en-us/downloads/bd99f343-4ff4-4041-8293-34c054efe749/default.aspx
POSIX regex.h - http://pubs.opengroup.org/onlinepubs/009695399/basedefs/regex.h.html

Osobiście polecam nr 1.

Na pytanie w wątku odpowiada ta strona:
http://bit.ly/nbHNw2

C0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 41
0

Napisałem taką funkcje, która sprawdza ile jest liczb i wyrazów w zdaniu:

Kopiuj
void func(string text, short n, short w){
    string::iterator it;
    while(std::getline(std::cin, text)){
    n = 0; w =0;
    for(it = text.begin(); it < text.end(); it++){
           if('1' <= *it && *it <= '9') n++;
           else if(*it == ' ' && ('A' <=*(it-1) && *(it-1) <= 'z')) w++;
           else if(it == text.end()-1 && ('A' <= *it && *it <= 'z')) w++;
    }
    if(n==0 || w==0) continue;
    printf("%hd %hd\n", n, w);
    }
}

Czy ktoś jest w stanie napisać taką funkcje prościej?

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie ogarniam za bardzo dlaczego używasz argumentów funkcji zamiast deklarować zmienne lokalne.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Może nie krócej, ale prościej:

Kopiuj
#include <cstdio>
#include <cstdlib>
#include <ctype.h>

/*
 * 
 */
int main(int argc, char** argv) {

    char napis[999];
    gets(napis);

    int liczniki[3] = {0, 0, 0};

    int poprzedniTyp = 2;
    for (int i = 0; napis[i] != '\0'; i++) {
        unsigned char c = napis[i];
        int typ;
        if (isdigit(c)) {
            typ = 0;
        } else if (isalpha(c)) {
            typ = 1;
        } else {
            typ = 2;
        }
        if (poprzedniTyp != typ) {
            liczniki[typ]++;
        }
        poprzedniTyp = typ;
    }
    printf("liczb: %d, slow: %d\n", liczniki[0], liczniki[1]);

    return EXIT_SUCCESS;
}
  • Rejestracja: dni
  • Ostatnio: dni
0

A może w javie? Ktoś go kiedyś wrzucił na forum.

Kopiuj
 public class ZnajdzCyfryWStringach{
    public static void main(String[] args) 
    {
	String s = "si22ema17";
	System.out.println(znajdzCyfry(s));
    }
    
    static String znajdzCyfry(String string){
	StringBuilder wynik = new StringBuilder();
	for (int i = 0; i < string.length(); i++) {
	    if(Character.isDigit(string.charAt(i))){
		wynik.append(string.charAt(i));
	    }
	}
	return wynik.toString();
    }
}
  • Rejestracja: dni
  • Ostatnio: dni
0

Ja bym zaczął od ustalenia co jest liczbą? "76" pewnie tak, a "23.55", "23,55", "6666666666666666666666666666666666666666666668888888888" też?
I co jest wyrazem, "biało-czerwony" jest wyrazem?
"Jan1Jan" też wymaga sprecyzowania.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.