Sprawdzanie czy wyraz jest skrótką

0

Muszę napisać funkcje która jako parametr weźmie dwa słowa i sprawdzi czy słowo drugie jest skrótką pierwszego np. BURAK i BRAK. Mam napisany ten program ale nie rozumiem jednego momentu

#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
int Skrotka(char tab[], char tab2[]){
	int i=0, j=0;
while(tab[i]!=0){
	i++;
}
while(tab2[j]!=0){
	j++;
}
if(j!=i+1){
	return 0;
}
int S = j;
int s = i;
int k=0;
for(i=0;i<s;i++){
	for(j=0;j<S;j++){
	if(tab[i]==tab2[j]){
		tab[i]=0;
		tab2[j]=0;
		k++;
		break;
	}
}	
}
if(k==s){
	return 1;
}
else{
	return 0;
}

Nie rozumiem momentu od int S=j... i nwm czym jest tutaj k

1

Jeśli dobrze zrozumiałem twoje zadanie, to nie rozumiem czemu masz to tak skomplikowane.

int isSubsuquence(const char *s, const char *sub)
{
    while (*sub && *s) {
         if (*sub == *s) ++sub;
         ++s;
    }
    return *sub == 0;
}

I wcale ci się nie dziwie, że nie rozumiesz tego kodu, bo jest straszny.
Na dodatek chyba nie robi tego co trzeba, bo dane wejściowe "Krakow" i "wok" zwróci 1 a chyba z treści zadania wynika, że powinno zwrócić 0.

0

W oryginale jest, sprawdzane czy każda litera tab ma swój odpowiednik w tab2 jeśli ma to litery są wymazywane i licznik zwiększany.
Na koniec sprawdzane jest czy liczba dopasowań pasuje do długości napisu.
Efekt jest taki, że kolejność liter jest ignorowana.

U mnie idzie się po literach po kolei. Jeśli *sub nie pasuje do *s to litera w s jest przeskakiwana. 1 jest zwracane jeśli tą metodą dojdzie się do końca napisu w sub.

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