michal11 |
» 2017-06-14 22:23:04 W ramach ćwiczeń #include <iostream> #include <string> #include <algorithm>
int main() { std::string num1 = "23"; std::string num2 = "14"; auto misPair = std::mismatch( num1.cbegin(), num1.cend(), num2.cbegin() ); if( misPair.first == num1.cend() ) { std::cout << "Equals" << std::endl; } else { std::cout << num1 << " "; std::cout <<(( * misPair.first < * misPair.second ) ? "<" : ">" ); std::cout << " " << num2 << std::endl; } return 0; }
+ lektura http://www.cplusplus.com/reference/algorithm/mismatch/http://www.cplusplus.com/reference/utility/pair/http://www.cplusplus.com/reference/string/string/cbegin/http://www.cplusplus.com/reference/string/string/cend/Edit. Wstawię 3 linijki z elsa bo formater coś to rozjeżdża std::cout << num1 << " "; std::cout << ( ( *misPair.first < *misPair.second )?"<":">" ); std::cout << " " << num2 << std::endl;
Bardziej staromodne podejście std::string num1 = "1223"; std::string num2 = "1224";
int mismatchIndex = 0;
while( num1[ mismatchIndex ] == num2[ mismatchIndex ] ) { ++mismatchIndex; }
std::cout << mismatchIndex << std::endl;
w zasadzie to samo co std::mismatch tylko zrobione ręcznie. |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-06-15 01:52:07 if( diff < 0 ) { a.insert( a.begin(), - diff, '0' ); } else if( diff > 0 ) { b.insert( b.begin(), diff, '0' );
Nie rozumiem do końca tego zapisu, za co odpowiada insert i begin? Poza tym, nie dałoby się tego zrobić w jakiś prostszy sposób? Jest to jedno z zadań do tematu o pętli for i funkcjach. |
|
pekfos |
» 2017-06-15 02:13:45 if( a.length() > b.length() && znak == ">" || znak == ">=" || znak == "!=" ) cout << "TAK"; else if( a.length() < b.length() && znak == "<" || znak == "<=" || znak == "!=" ) cout << "TAK"; else cout << "NIE"; |
Ten fragment zawsze podaje jakąś odpowiedź. |
|
Chowan |
» 2017-06-15 12:44:38 Mam pytanko. Czy ta funkcja insert jest po to aby wyrównać długość tablic(wstawiasz dif '0' na początku stringa), żeby przy porównaniu nie wychodzić poza zakres tablicy, bo tam może coś być i zaburzy to wynik? |
|
bartinio07 Temat założony przez niniejszego użytkownika |
» 2017-06-15 12:57:53 No przecież ma zawsze podawać odpowiedź Tak lub Nie, w zależności od tego, czy nierówność jest prawdziwa. |
|
pekfos |
» 2017-06-15 13:36:51 No przecież ma zawsze podawać odpowiedź Tak lub Nie, w zależności od tego, czy nierówność jest prawdziwa. |
No właśnie ma nie zawsze podawać. Jeśli sam ten fragment podaje odpowiedź, reszta kodu nie ma znaczenia. Dla uproszczenia kodu i warunków, napisz funkcję, która zwraca signum różnicy dwóch liczb. Aktualnie na siłę utrudniasz sobie życie z tymi wszystkimi operatorami. if( oper == ">=" ) std::cout << porownaj( liczba1, liczba2 ) >= 0 ? "TAK" : "NIE";
Nie musisz implementować odejmowania, po prostu zwracaj ręcznie wartości -1/0/1 jeśli wykryjesz, że któraś z liczb jest większa. |
|
mateczek |
» 2017-06-15 17:54:02 Mam pytanko. Czy ta funkcja insert jest po to aby wyrównać długość tablic(wstawiasz dif '0' na początku stringa), |
jeśli na wejście trafią stringi "123" i "12345" to pierwszy z nich będzie przerobiony na "00123" Porównanie wówczas jest banalne bo wystarczy posłużyć się operatorem już zdefiniowanym do sortowania napisów |
|
pekfos |
» 2017-06-15 19:22:45 jeśli na wejście trafią stringi "123" i "12345" to pierwszy z nich będzie przerobiony na "00123" Porównanie wówczas jest banalne bo wystarczy posłużyć się operatorem już zdefiniowanym do sortowania napisów |
Jeśli na wejście trafią stringi "123" i "12345", to nie trzeba nawet sprawdzać ich zawartości. |
|
1 « 2 » 3 |