Je rencontre des problèmes avec une tâche, et j'ai cherché dans toute la pile et google, mais je n'arrive pas à comprendre les problèmes.C++ comparant le fichier texte et l'erreur de segmentation (core dumped)
À l'heure actuelle, le seul code que j'ai à ce jour est de demander à l'utilisateur de mettre une phrase, puis de diviser la phrase en différentes chaînes. Et j'ai aussi besoin de le comparer à un fichier texte que j'ai à mi-chemin.
Premier problème: Ma méthode de décomposition des mots en différentes chaînes ne fonctionne que rarement. Par exemple quand j'écris "les gens d'histoire" il me dit theres une faute de segmentation, mais si je tape dans "les gens d'histoire" (avec l'espace à la fin), cela fonctionne bien. Je suis confus quel est le problème.
Le deuxième problème est que je ne peux pas comprendre comment comparer ma chaîne au fichier texte ligne par ligne, il semble stocker le fichier entier dans ma variable de chaîne "texte".
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int noun(string n)
{
ifstream inputfile;
bool found = false; // set boolean value to false first
string text;
inputfile.open("nouns"); // open text file
if (!inputfile.is_open())
{ // checks to make sure file is open
cout << "Error" << endl;
}
while (getline(inputfile,text,' '))
{
if (n == text)
{
found = true;
cout << text;
}
}
inputfile.close(); // close the file
return found; // return true or false
}
int main()
{
string sent;
string word1, word2, word3, word4; // strings to parse the string 'sent'
cout << "Please enter a sentence" << endl;
getline (cin, sent);
int w1, w2, w3, w4 = 0; // positions in relation to the string
while (sent[w1] != ' ')
{ // while loop to store first word
word1 += sent[w1];
w1++;
}
w2 = w1 + 1;
while (sent[w2] != ' ')
{ // while loop to store second word
word2 += sent[w2];
w2++;
}
w3 = w2 + 1;
while (sent[w3] != ' ')
{ // while loop to store 3rd word
word3 += sent[w3];
w3++;
}
w4 = w3 + 1;
while (sent[w4] != sent[-1])
{ // while loop to store 4th word
word4 += sent[w4];
w4++;
}
cout << word1;
if (sent.empty())
{ // empty set returns "invalid sentence"
cout << "Invalid Sentence" << endl;
}
else if (noun(word1) == true)
{
cout << "This is valid according to rule 1" << endl;
}
return 0;
}
une autre chose que j'ai oublié de mentionner, si j'écris juste le mot "histoire" il imprime "histoire!" idk où le point d'exclamation vient de – HCL212
Pourquoi ne pas juste 'cin >> word1; cin >> mot2; ... '? – SingerOfTheFall
S'il vous plaît [modifier] votre code pour le réduire à [mcve] de votre problème. Votre code actuel comprend beaucoup de choses qui sont périphériques à votre problème - un échantillon minimal ressemble normalement à un bon test unitaire: effectuer une seule tâche, avec des valeurs d'entrée spécifiées pour la reproductibilité. –