Wpis z mikrobloga

Może ktoś mi podpowie z C. Mam 1000 stringów o tej samej długości i muszę wybrać przez input string 342 oraz 954, żeby zamienić ich zawartość miejscami.

Algorytm zamiany str1 z str2 jest taki:

for (i = 0; str1[i] != '\0'; i++)
{
tmp = str1[i];
str1[i] = str2[i];
str2[i] = tmp;
}

Jak podstawić str342 oraz str954 przez input?

#jezykc #programowanie
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Bo jak masz kopiowanie zawartości jednego stringa do drugiego, to możesz się szybko spotkać z przekroczeniem rozmiaru tablicy jeśli masz stringi o różnej długości.


@mackarr: Ano. Tylko inne części programu maja mieć dostęp do str1, str2, str3, itd. No i mam nie używać pointerów...
  • Odpowiedz
@Zian: Ad 1. Możesz z tego zrobić globalną zmienną.
Ad 2. Masz gwarancję że stringi są tej samej długości? Jeśli nie, to się nadziejesz na problem z index out bound. Co do nieużywania pointerów to możesz próbować zrobić strarr jako const char[][], ale nie wiem czy ci łyknie i sam swap robić tak jak robiłeś do tej pory, tylko wtedy musisz mieć gwarancję tej samej długości (albo zapewnić wystarczająco dużo
  • Odpowiedz
@Zian: Jesteś pewien, że czegoś nie pomyliłeś? Mając 1000 tablic w stylu char str1[] = "abc" niestety nie jesteś w stanie jakoś dopisać numeru podczas gdy program działa i jeżeli użytkownik wprowadzi 2 liczby to bez tablicy się tam nie dostaniesz w rozsądny sposób (zrobienie 500 000 ifów nie jest rozsądnym rozwiązaniem).

Potrzebujesz przynajmniej użyć char *ptr[] = {str1, str2, str3, ..., str1000}. I wtedy robisz swapa bez problemu
  • Odpowiedz
@mackarr: Mam pewność, że taka sama długość, ale odpada wielowymiarowa tablica.

@Defined: Złoto! Krótki i czytelny kod. Tylko nie wiem jak to zrobić bez pointera. Pogadam z nauczycielem, bo sam bez warunków nie widzę rozwiązania.
  • Odpowiedz