Wyszukiwanie ciągu "x,xx" - jest moze lepszy sposób ?

0

Witam.

Napisałem taki oto kod:

 

	int numer_znaku;
	std::string kurs ;
	std::string line ;

while(kurs.length() < 4 ){

		++numer_znaku;

		if ((line[numer_znaku] >= 48) && (line[numer_znaku] <= 58)) {
		kurs += line[numer_znaku];
		++numer_znaku;}
		else 
		{
			kurs.clear();
			continue;
		}

		if (line[numer_znaku] = 44){
		kurs += line[numer_znaku];
		++numer_znaku;}
		else
		{
			kurs.clear();
			continue;
		}

		if ((line[numer_znaku] >= 48) && (line[numer_znaku] <= 58)) {
		kurs += line[numer_znaku];
		++numer_znaku;}
		else 
		{
			kurs.clear();
			continue;
		}

		if ((line[numer_znaku] >= 48) && (line[numer_znaku] <= 58)) {
		kurs += line[numer_znaku];
		++numer_znaku;}
		else 
		{
			kurs.clear();
			continue;
		}
	};

Jego zadaniem jest wyszukac w stringu "line" takiego ciągu "x,xx", a konkretnie chodzi aby wyciagnal ze strony kurs waluty np."4,21".
Ogolnie dziala to tak za pomoca instrukcji "if" sprawdza czy nastepny znak jest cyfra,potem przecinkiem i potem znowu 2 razy cyfrą.
Jesli oczywiscie wystapi cyfra ,a potem zamiast "," wystapi co innego to wtedy czyszcze stringa "line" i petla zaczyna sie od początku.
Petla wykonuje się dopoki string "kurs" zapełniony będzie 4 znakami.
Ogolnie wszytsko działa.Chciałem tylko dowiedzieć się czy istnieje może jakiś ładniejszy zapis tego kodu ?

1

A przeczytaj sobie ten artykul. Mysle ze pomoze.
http://cpp0x.pl/artykuly/?id=47

0

Zupelnie wypadł mi z głowy ten artykuł, a kiedyś go czytałem.
Dzięki :)

0
#include <cstring>
#include <iostream>

using namespace std;

int isDigit(char ch) {
	return (ch >= '0' && ch <= '9');
}

char *kurs(const char *line) {
	char *kurs = new char[5];
	kurs[4] = 0;
	while(line = strchr(line+1, ',')) {
		if (isDigit(line[-1]) && isDigit(line[1]) && isDigit(line[2]) ) {
			return strncpy(kurs, line-1, 4);
		}
	}
	return NULL;
}

int main(void) {
	string line = "asdasd asd2,7asd as das das d,a sdas d 3,34asdasd";
	cout << kurs(line.c_str());
	return 0;
}
0

A wie ktos moze czy kozystając z regex mozna zacząć wyszukiwać od danej pozycji w stringu ?
Np zeby wyszukiwal mi wzorzec, ale zaczynajac od znaku nr 100 w stringu ?

0

Ale chodziło mi za pomocą regex

0

Którego wyrażenia?

0

Ogolnie wtedy wyszukuje mi, ale chciałbym zeby zamiast liczby {100} była wstawiona tam zmienna int liczba czyli {liczba}, ale to nie działa.
I chciałbym żeby od pozycji 100 znalazł mi wzorzec ("\d,\d\d") , a kiedy ja wpisze (".{100}\d,\d\d") to wtedy oprocz znaleziongo wzorca tj. 3,33 wypisuje mi kupe znaków które byłe przed wzorcem, czyli wszystkie od pozycji 100 do wzorca.

0

.{100}(\d,\d\d) i szukany wzorzec będzie w wynik[1]. patrz rozdział o podwzorcach

0

Ale idzie wstawic zamiast {100} jakas zmienna ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1