Elementy w wektorze

0

Załóżmy, że mam w wektorze dwie liczby. Chce teraz porównywać każde dwie cyfry na danym miejscu w obu tych liczbach. Jak odwołać się do tych cyfr z jednego i drugiego elementu?

std::vector <std::string> liczby {"12345", "543210"};

std::cout << liczby[0]  // wyświetla mi element o indeksie 0

Ale nie wiem jak odwołać się do konkretnej cyfry w którymś elemencie. Kod poniżej to część programu, który tworzy nową liczbę, w której na kolejnych miejscach znajdować się będą cyfry największe z danego indeksu w obu podanych liczbach.

void ciag( std::vector <std::string> liczby )
  {
     if ( liczby[0].size() < liczby[1].size() )
        int krotszy = liczby[0].size();   // sprawdza, która jest krótsza, by stworzyć nową o takiej samej długości
     else
        int krotszy = liczby[1].size();
       
  std::string liczba;  
     for ( int i=0; i <= krotszy ; i++)
       {
           int a = max(no i tu przydałyby się te cyfry);
           liczba.push_back(a);
       }
return liczba;
   }
0

liczby[0][i] oraz liczby[1][i]?

0

Ten zapis wydawał mi się bzdurny, ale działa. Dzięki. Mam jeszcze jeden problem:

 
         if ( strcmp( liczby[0][i], liczby[0][i] ) < 0 )
   

Wywala mi w tym miejscu błąd o nieprawidłowej konwersji z char do const char* . Jak sobie z tym poradzić bez rezygnacji z strcmp?

0

Dlaczego bzdurny? liczby[0] jest typu std::string &, a std::string ma przeciążony operator [], który zwraca typ char &. liczby[0][i] to w zasadzie liczby.operator[](0).operator[](i).

strcmp służy do porównania dwóch c-stringów czyli const char * a Ty masz char. Nie użyjesz tej funkcji do takiego porównania. Spójrz na tablicę kodów ASCII i zauważ, że w zasadzie nie jest Ci ona potrzebna.

0

Możesz porównać dwa pojedyncze znaki ze sobą.

0
Endrju napisał(a):

Dlaczego bzdurny?
Bo ciężko byłoby się połapać o co chodzi (jak dla mnie).

Mam nadzieję, że to już ostatni problem. Po lekkim ulepszeniu kodu mam warninga

error: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'

A to jest linia gdzie on występuje:

liczba.push_back(liczby[1][i]);
0

To nie jest ta linia, przecież błąd mówi o funkcji strcmp. Nie można skonwertować std::string na const char *. Do "konwersji" służy metoda c_str(), ale nie jestem pewien co Ty chcesz zrobić.

0

Nie mam już funkcji strcmp.

         if (  liczby[0][i] < liczby[1][i] )
           {
             liczba.push_back(liczby[1][i]);  // kompilator tutaj wskazuje błąd
0

Wrzuć cały program, bo teoretycznie nie powinieneś mieć tu błędu.

 
    vector <string> liczby;
    liczby.push_back("22343");
    string liczba;
    liczba.push_back(liczby[0][1]);
0

Ten temat wyjaśnia dlaczego nie powinno zaczynać się od C++...

if ( strcmp( liczby[0][i], liczby[0][i] ) < 0 )

można po prostu tak:
if (liczby[0][i] < liczby[0][i])
dlatego, że porównujesz pojedyncze znaki

liczba.push_back(a);
nie jestem pewien czy std::string ma push_back, ale na pewno powinno zadziałać również zwykłe:
liczba += a;

0
krwq napisał(a):

Ten temat wyjaśnia dlaczego nie powinno zaczynać się od C++...

if ( strcmp( liczby[0][i], liczby[0][i] ) < 0 )

można po prostu tak:
if (liczby[0][i] < liczby[0][i])
dlatego, że porównujesz pojedyncze znaki

Nie miałem wyboru, muszę zrobić ten kurs na studiach. Podobno to bardzo łatwy język dla początkujących.. Może gdybym miał więcej czasu.. A i tak więcej się dowiaduję z neta niż z zajęć.

krwq napisał(a):

liczba.push_back(a);
nie jestem pewien czy std::string ma push_back, ale na pewno powinno zadziałać zwykłe:
liczba += a;

Ma i już działa, nie wiem czemu Code::Blocks krzyczał o błędzie..

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