• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obsługa błędów: dwie takie same nazwy w tablicy

VPS Starter Arubacloud
0 głosów
189 wizyt
pytanie zadane 30 maja 2015 w C i C++ przez keresmi Użytkownik (770 p.)
Potrzebuje przechować w tablicy nazwy, jednak nie chciałym żeby się powtarzały. Czy da się to jakoś optymalnie zaprogramować bez sprwadzania poprzednich wpisów w pętli for?

4 odpowiedzi

+1 głos
odpowiedź 31 maja 2015 przez Bartek85 Mądrala (7,440 p.)
wybrane 31 maja 2015 przez keresmi
 
Najlepsza
Najlepiej użyc kontenera "map" ze standardowej biblioteki STL. :) Gwarantuje  brak duplikatów, jest oparty na drzewie binarnym, jest bardzo szybki, nie posiada błędów w przeciwieństwie do własnej implementacji, która potencjalnie może być zła. Kolejna rzecz, to po co wyważać otwarte drzwi ;)
komentarz 31 maja 2015 przez keresmi Użytkownik (770 p.)
Nigdy wcześniej nie korzystałem z tego kontenera i dlatego nie wiedziałem, że istnieje taka możliwość. Dzięki wielkie za pomoc problem rozwiązany! :)
0 głosów
odpowiedź 30 maja 2015 przez Harsay Pasjonat (23,640 p.)
Nie jest to możliwe bez sprawdzania poprzednich elementów tablicy.
0 głosów
odpowiedź 30 maja 2015 przez hit02 Nałogowiec (33,970 p.)
W tablicy nie będzie optymalnie, ale jeśli pokombinujesz na przykład z drzewem, to nie będziesz musiał sprawdzać wszystkich elementów, ale tylko kilka.
0 głosów
odpowiedź 31 maja 2015 przez keresmi Użytkownik (770 p.)
edycja 31 maja 2015 przez keresmi

string errors::correct_name(int i, string *tab) // przesylam do funkcji aktualna pozycje wpisywania do tablicy (pętla for) i wskaznik na pierwszy element tablicy 
{
    string name;
    bool exit = false;
    int counter = 0;

    while(counter != i)
    {
        cin >> name;
        for (int j=0; j<i; j++)
        {
            if (name == *tab) // sprawdzanie czy nazwy sa takie same
            {
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                cout << "Podana nazwa juz istnieje. Sprobuj ponownie: ";
                exit = true;
            }
            if (exit == true) // wyjscie z petli w przypadku dwoch takich samych nazw
            break;
            counter++; // zwiekszamy licznik
            tab++; // przesuwamy wskaznik na nastepna nazwe
        }
        tab -= counter; // ustawiamy wskaznik na poczatku
        exit = false; // utawiamy wyjscie z petli na wartosc poczatkowa
    }
    return name;
}

 

komentarz 31 maja 2015 przez keresmi Użytkownik (770 p.)
Spróbowałem napisać taką funkcję, jednak nie działa do końca dobrze. Przejrzałem kod na debugerze i najprawdopodniej mam gdzieś wyciek pamięci (błąd segmentation fault), nie mogę wyjść z pętli for i nie wiem dlaczego tak się dzieje. Czy ktoś mógłby mi z tym pomóc?

Podobne pytania

0 głosów
1 odpowiedź 243 wizyt
0 głosów
0 odpowiedzi 367 wizyt
pytanie zadane 1 października 2019 w Sieci komputerowe, internet przez PaniMiodek Początkujący (260 p.)
0 głosów
2 odpowiedzi 137 wizyt
pytanie zadane 25 marca 2016 w Java przez azybad Mądrala (5,500 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...