std::cin ignore les espaces en blanc
Donc je suis en train d'écrire une fonction pour vérifier si un mot est dans une phrase, par une boucle dans un tableau de char et de vérification pour la même chaîne de char. Le programme fonctionne tant que la Peine n'a pas d'espaces. J'ai googlé autour et ils sont tous les mêmes suggestions;
cin.getline
Mais cependant j'ai la mettre en œuvre, soit il ne fonctionne pas ou ignore l'ensemble de l'entrée et va tout droit vers la sortie.
Comment puis-je tenir compte des espaces?
#include <iostream>
using namespace std;
bool isPartOf(char *, char *);
int main()
{
char* Word= new char[40];
char* Sentence= new char[200];
cout << "Please enter a word: ";
cin >> Word;
cout << endl << "Please enter a sentence: ";
//After Word is input, the below input is skipped and a final output is given.
cin.getline(Sentence, 190);
cout << endl;
if (isPartOf(Word, Sentence)==true)
{
cout << endl << "It is part of it.";
}
else
{
cout << endl << "It is not part of it.";
}
}
bool isPartOf(char* a, char* b) //This is the function that does the comparison.
{
int i,j,k;
for(i = 0; b[i] != '#include <iostream>
using namespace std;
bool isPartOf(char *, char *);
int main()
{
char* Word= new char[40];
char* Sentence= new char[200];
cout << "Please enter a word: ";
cin >> Word;
cout << endl << "Please enter a sentence: ";
//After Word is input, the below input is skipped and a final output is given.
cin.getline(Sentence, 190);
cout << endl;
if (isPartOf(Word, Sentence)==true)
{
cout << endl << "It is part of it.";
}
else
{
cout << endl << "It is not part of it.";
}
}
bool isPartOf(char* a, char* b) //This is the function that does the comparison.
{
int i,j,k;
for(i = 0; b[i] != '\0'; i++)
{
j = 0;
if (a[j] == b[i])
{
k = i;
while (a[j] == b[k])
{
j++;
k++;
return 1;
if (a[j]=='\0')
{
break;
}
}
}
}
return 0;
}
'; i++)
{
j = 0;
if (a[j] == b[i])
{
k = i;
while (a[j] == b[k])
{
j++;
k++;
return 1;
if (a[j]=='#include <iostream>
using namespace std;
bool isPartOf(char *, char *);
int main()
{
char* Word= new char[40];
char* Sentence= new char[200];
cout << "Please enter a word: ";
cin >> Word;
cout << endl << "Please enter a sentence: ";
//After Word is input, the below input is skipped and a final output is given.
cin.getline(Sentence, 190);
cout << endl;
if (isPartOf(Word, Sentence)==true)
{
cout << endl << "It is part of it.";
}
else
{
cout << endl << "It is not part of it.";
}
}
bool isPartOf(char* a, char* b) //This is the function that does the comparison.
{
int i,j,k;
for(i = 0; b[i] != '\0'; i++)
{
j = 0;
if (a[j] == b[i])
{
k = i;
while (a[j] == b[k])
{
j++;
k++;
return 1;
if (a[j]=='\0')
{
break;
}
}
}
}
return 0;
}
')
{
break;
}
}
}
}
return 0;
}
Et je ne suis pas autorisé à utiliser strstr pour la comparaison.
- De ce fait, le problème avec l'aide de
std::getline()
etstd::istringstream
? - Il ne demande jamais de l'entrée de la Phrase. Voici ce que le cmd ressemble lors de l'exécution du code. LIEN
Vous devez vous connecter pour publier un commentaire.
Ok, je vais essayer d'expliquer votre problème:
Supposons ceci est votre entrée:
Lorsque vous utilisez cin et de lui donner de l'entrée, il s'arrête sur le caractère de saut de ligne qui, dans mon exemple suit le caractère 'd' dans 'thisisaword'.
Maintenant, votre getline fonction va lire tous les caractères jusqu'à ce qu'il cesse de caractère de saut de ligne.
Problème, c'est le premier caractère getline rencontre est déjà un retour à la ligne pour qu'il cesse immédiatement.
Comment est-ce arrivé?
Je vais essayer de l'expliquer comme ceci:
Si c'est votre entrée donné à un programme (note \n caractères, le traiter comme un seul caractère):
Ce que votre cin fonction sera de prendre et de laisser:
Maintenant getline voit cette entrée et est invité à obtenir tous les caractères jusqu'à ce qu'il rencontre un caractère de saut de ligne qui est "\n"
cin lit d'entrée et de feuilles "\n", où getline comprend "\n".
Pour surmonter cette:
Comme l'a dit, nous ne pouvons pas utiliser cin de nouveau parce qu'il ne fait rien.
On peut soit utiliser la cin.ignore() sans paramètres et laissez-supprimer le premier caractère de l'entrée ou de l'utilisation 2x getline(première restants \n, deuxième prendra la phrase \n)
Vous pouvez également éviter ce genre de problème de commutation de votre cin >> Mot; pour une fonction getline.
Puisque c'est marqué que C++, j'ai changé de Char*[] pour Cordes, pour cet exemple:
OU
Comment l'utilisation de ce:
cin par défaut utilise quelque chose comme ceci:
Et vous pouvez combiner les drapeaux:
Me dire si cela fonctionne pour vous : )
Par défaut de l'opérateur>> ignore les espaces. Vous pouvez modifier ce comportement.
va provoquer
is's >> operator
pour traiter les espaces comme des caractères ordinaires.