J'ai une fonction qui prend une chaîne entrée par l'utilisateur et la divise en mots individuels en utilisant un tableau bidimensionnel alloué dynamiquement. Les mots sont séparés par des délimiteurs utilisés comme indicateurs de l'endroit où un mot se termine et un autre commence.Je continue d'obtenir une erreur de segmentation chaque fois que j'exécute ce programme, mais je ne comprends pas pourquoi
Voici mon code:
int countWords(const char * sentence, char * delims)
{
int wordsInArray = 0;
int count = 0;
while(*(sentence + count) != '\0')
{
if(*(sentence + count) == *delims && *(sentence + count + 1) != *delims)
{
wordsInArray++;
}
if(*(sentence + count + 1) == '\0')
{
wordsInArray++;
}
count++;
}
return wordsInArray;
}
int getLength(const char * sentence)
{
const char *p = sentence;
while(*p != '\0')
{
p++;
}
return p-sentence;
}
char ** getWords(const char * sentence, int & wordcount)
{
char delims[] = " .,\t?!";
int sentenceLength = getLength(sentence);
wordcount = countWords(sentence, delims);
char ** words;
words = new char *[wordcount];
int length = 0;
int count = 0;
for (int a = 0; a < sentenceLength; a++)
{
if(*(sentence + a) != *delims)
{
length++;
}
else if ((*(sentence + a) == *delims && *(sentence + a + 1) != *delims) || *(sentence + a) == '\0')
{
*(words + count) = new char[length+1];
for (int z = 0; z < length; z++)
{
*(*(words + count) + z) = *(sentence + z);
}
length = 0;
count++;
}
}
return words;
}
Cependant, ma fonction est countWords
sans compter correctement les mots dans la chaîne, et je ne sais pas pourquoi.
Je ne sais pas quel est le problème, mais il est idiomatique d'écrire des expressions telles que '* (phrase + a)' comme l'équivalent 'phrase [a]'. Votre programme serait probablement plus lisible si vous utilisiez cet idiome. –
Et 'getLength()' semble être juste votre propre implémentation de 'strlen()'. N'êtes-vous pas autorisé à utiliser 'strlen()' dans votre travail? Deuxièmement, vous avez une chaîne 'delims', mais vous n'utilisez que le premier caractère. –
Ce programme ne peut pas fonctionner - il n'y a pas de fonction 'main'. –