Porównanie argumentu typu string z elementami tablicy string

0

Witam!
Mam następujący problem z kodem w języku C++. Mianowicie pobieram od użytkownika argument w momencie uruchomienia programu.

int main(int argc, char * argv[])

Następnie jeśli argument nie jest liczbą zamieniam go na stringa.

string rzym(argv[i]);

Czy to jest poprawne? Potrzebuje stringa ponieważ chce porównać elementy zmiennej "rzym" z elementami statycznej tablicy typu string. Czy operator " == " będzie dobry do tego? Z góry dziękuję za pomoc :)

0

Przecież jeżeli będzie zły to dostaniesz error i nic poza tym, dlaczego nie spróbujesz? W temacie: zapoznaj się z funkcją strcmp.

0

Tablicę możesz zrobić tak:

char *tb[]=
  {
   "Napis A",
   "Napis B",
   "Napis C",
  };

a porównywać za pomocą: if(strcmp(argv[i],tb[k])==0) // napisy identyczne
Nie musisz przerabiać tego na string, ale jak przerobiłeś to możesz sobie porównywać to za pomocą operatora == ze zmiennymi typu string lub char* (c-string).

0

Próbowałem użyć strcmp, jednak otrzymałem bład, którego nie za bardzo jestem wstanie się pozbyć.

0

Tylko, że moja tablica musi być postaci:
static int liczby[] = { "I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M" };

0

Nie, nie może być w tej postaci, musi być w tej postaci: static char *liczby[] = { "I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M" };

0

Jednak dalej nie rozumiem :( To jest fragment kodu. Zamiana z arabskich na rzymskie mi działa, jednak kiedy próbuje porównywać stringi by zamienić liczbę z rzymskich na arabskie wywala mi błedy.

class RzymArab 
{
	private :
		static string liczby[];
		static int liczby_arabskie[];
	public :
		static int rzym2arab (string rzym) throw (RzymArabException);
		static string arab2rzym (int arab) throw(RzymArabException);
		RzymArab();
		~RzymArab();
};

string RzymArab::liczby[]= { "I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M" };
int RzymArab::liczby_arabskie[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
1

Dwa sposoby:
1.

static const char* liczby[] = {"I","IV","V", ... };
if (strcmp(argv[i], liczby[j]) == 0)
    ...
static const string liczby[] =  {"I","IV","V", ... };
if (string(argv[i]) == liczby[j])
    ...

char* porównujemy funkcją strcmp, która zwraca 0 gdy ciągi są równe.
stringi porównujemy operatorem ==, który zwraca true gdy ciągi są równe.

możesz użyć jednego albo drugiego, do woli.

0

Azarien, twoja odpowiedź mi pomogła :) Tylko teraz jak sprawdzić czy litera stojąca na miejscu " j "w zmiennej rzym jest równa elementowi " i " z tablicy liczby?

if(rzym[j] == liczby[i])

Tu mi wywala bład.

Edit : Dołączyłem screen z błędem, może komuś ten komunikat coś powie.

1

Musisz trochę się zastanowić i zmienić algorytm.
rzym[j] - jest literą, jednym znakiem.
liczba[i] - jest napisem który może zawierać więcej niż jeden znak.
Nie możesz porównywać nieporównywalnych typów.

0

Ok, dzięki wielkie za pomoc. Rozwiązanie tego na charach będzie już proste. Temat do zamknięcia :)

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