Donc, j'ai une tâche pour trouver le nombre de sous-chaînes dans une chaîne donnée. Je ne peux utiliser aucune bibliothèque C pour effectuer cette tâche. stringExist ne peut avoir que 2 chaînes en tant que paramètres.Solution plus optimisée, trouvez le nombre de sous-chaînes dans une chaîne. En utilisant C
Ma solution fonctionne, mais j'ai le sentiment qu'il devrait y avoir une manière plus élégante de faire cette tâche. Solution 1:il se trouve, il ne fonctionne pas correctement
#include <stdio.h>
int stringExist(char string[], char s2[]);
int main(void){
char string[] = "strstrASDstrSTRst";
char s2[] = "str";
printf("Final result: %i\n",stringExist(string,s2));
return 0;
}
int stringExist(char string[], char s2[]){
/* I am aware that I can init all this values in one row */
int count = 0;
int size = 0;
int i = 0;
int temp = 0;
int result = 0;
while(s2[size]!='\0'){
size++;
}
while(string[i]!='\0')
{
if(string[i]==s2[0])
{
printf("Found first occurrence\n");
count=0;
while((temp=(string[i]==s2[count]))!=0)
{
count++;
if(size==count){
printf("Match\n");
result++;
break;
}
i++;
}
}
i++;
}
return result;
}
Solution numéro 2:
Jusqu'à présent, aucune erreur trouvée. J'ai fait une traversée de chaîne un peu différente, maintenant je n'incrémente pas i dans la boucle de comparaison de caractères.
#include <stdio.h>
int stringExist(char string[], char s2[]);
int main(void){
char string[] = "bobobobojkhhkjjkhbo;klkl;bobo";
char s2[] = "bobo";
printf("Final result: %i\n",stringExist(string,s2));
return 0;
}
int stringExist(char string[], char s2[]){
int count = 0;
int size = 0;
int i = 0;
int c = 0;
int temp = 0;
int result = 0;
while(s2[size]!='\0'){
size++;
}
for(i=0;string[i]!='\0';i++){
if(string[i]==s2[0])
{
printf("Found first occurence at %i\n",i);
count = 0;
c = i;
while((temp=(string[c]==s2[count]))!=0)
{
printf("Count %i, I %i, current char: %c\n",count, c,string[c]);
count++;
if(size==count){
printf("Match\n");
result++;
break;
}
c++;
}
}
}
return result;
}
Merci pour vos suggestions, Vitaly
Cette imprimera « première occurrence » chaque fois que le premier caractère de s2 se trouve dans s1. – egrunin
Votre fonction ne fonctionne pas. Essayez 'char string [] = "strstrASDstrSTRststr";' où la réponse devrait être 4. – Dingo
Merci Dingo, j'ai trouvé ce problème aussi = (... Je pense que j'utilise une mauvaise approche ici ... bah je suis à court d'idées – Vitaly