Sprawdzanie podciągu w tablicy

Sprawdzanie podciągu w tablicy
bartek164
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad rok
  • Postów:534
0

Sprawdzanie podciągu 'what' w tablicy 'where'

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int amount_substring(const char* where, const char* what)
{
    int i, amount = 0;
    int is;
    while (where != '\0')
        is = 1;
        for (i = 0; i < strlen(what); ++i) {
            *where++ == what[i] ? is = 1 : is = 0; // co jest nie tak z tą instrukcją
            if (is == 0)
                break;
        }

    return amount;
}

int main()
{
    char substring[] = { "tak" };
    char Fullstr[] = "tak,tak,nie";
    amount_substring(Fullstr, substring);
    return 0;
}


edytowany 1x, ostatnio: bartek164
Zobacz pozostałe 2 komentarze
bartek164
co jest nie tak z tą instrukcją, bo coś nie działa, a naprawde nie wiem dlaczego
kq
Z jaką instrukcją? Dlaczego w poście nie ma pytania?
twonek
Pytanie w poście, nie kodzie ani komentarzu.
bartek164
no jest w kodzie, nie
twonek
i nie powinno tam być
twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
0

Pomijając to czy w ogóle instrukcja robi dokładnie to chcesz zamierzasz, to syntaktycznie powinno być

Kopiuj
is = (*where++ == what[i]) ? 1 : 0;
edytowany 2x, ostatnio: twonek
bartek164
a ma robić to, że sprawdza czy znak w tablicy where jest równy znakowi what[i] w tablicy 'what' i jeżleli jest to prawda to robi sprawdzanie dalej
bartek164
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad rok
  • Postów:534
0
Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int amount_substring(const char* where, const char* what)
{
    int i, amount = 0;
    int is;
    while (*where != '\0'){
        is = 1;
        for (i = 0; i < strlen(what); ++i) {
            is = (*where++ == what[i]) ? 1 : 0;
            if (is == 0)
                break;
            if(i == strlen(what)) ++amount;
        }
    }
    return amount;
}

int main()
{
    char substring[] = { "tak" };
    char Fullstr[] = "tak,tak,nie";
    printf("%d",amount_substring(Fullstr, substring));
    return 0;
}

twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
0

Ten kod się wysypie jeśli where jest krótsze od what i mają takie same znaki (inaczej mówiąc, where jest prefiksem what).

bartek164
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad rok
  • Postów:534
0
Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int amount_substring(const char* where, const char* what)
{
    int i, amount = 0;
    int is;
    if(strlen(where) < strlen(what)) return 0;
    while (*where){
        is = 1;
        for (i = 0; i < strlen(what); ++i) {
            is = (*where++ == *(what+i)) ? 1 : 0;
            if (is == 0)
                break;
            if(i == strlen(what - 1)) ++amount;
        }
    }
    return amount;
}

int main()
{
    char substring[] = { "tak" };
    char Fullstr[] = "ta";
    printf("%d",amount_substring(Fullstr, substring));
    return 0;
}

no cóż, ;-; zrobiłem tak

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
0

co to ma niby robić? *where++ == what[i] ? is = 1 : is = 0; // co jest nie tak z tą instrukcją?
where wskazuje na const char.

Na dodatek po co sobie utrudniać życie?

Kopiuj
int amount_substring(const char* where, const char* what)
{
    int result = 0;
    assert(where);
    assert(what);

    while (where && *where) {
          where = strstr(where, what);
          if (where) {
               ++where;
               ++result;
          }
    }
    return result;
}

Zakładam, że amount_substring("aaaa", "aa") ma zwrócić 3.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
bartek164
nie, ma zwrócić 2
bartek164
no dalej nie wiem co jest nie tak z tą instukcją where porownywane do what, i jeśli jest prawdziwe to zmienna is przyjmuje wartość 1 jeśli nie to 0
MarekR22
co ja owca w stadzie, żeby mnie popędzać? Twój kod jest przekombinowany i nielogiczny, że nie ma sensu go naprawiać.
bartek164
co? ale jak to jest zły, ja cie nie popędzam, mój jest bardziej czytelny :))

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.