2009-07-27 7 views
1

J'essaie de supprimer les voyelles d'un fichier texte et j'ai quelques problèmes. Je reçois une erreur de compilateur en ligne 6 disantConversion invalide de const char en char - Suppression de voyelle

invalid conversion from const char to char 

Je suis sûr que cela a à voir avec la façon dont je suis la mise en place du flux de fichiers dans mon code. J'utilise fstream car il est utilisé pour la lecture et l'écriture, mais je n'ai inclus aucun des modes ouverts parce que je pensais pouvoir écrire et lire dans le fichier sans eux (je suis sûr que vous devez utiliser un Je ne sais pas non plus lequel.) En outre, je ne suis pas sûr que la façon dont j'ai configuré l'opérateur égal soit légale ou non (le lira-t-il comme si [i] est égal à a ou e ou i ou o ou u).

code:

#include "std_lib_facilities.h" 

void vowel_removal(string& s) 
{ 
    for(int i = 0; i < s.length(); ++i) 
      if(s[i] == ('a' || 'e' || 'i' || 'o' || 'u')) s[i] = " "; 
} 

int main() 
{ 
    cout << "Enter file name.\n"; 
    string filename; 
    cin >> filename; 
    fstream f(filename.c_str()); 

    string word; 
    while(f>>word){ 
        vowel_removal(word); 
        f << word; 
        } 

    keep_window_open(); 
} 
+1

Vous devez accepter l'une des réponses à votre question initiale, et au lieu de modifier celui-ci, ouvrez une nouvelle question pour ton autre problème. –

+0

OK. En général, j'ai eu l'impression que vous devriez simplement modifier votre question si vous en avez une autre, mais je vais vous croire sur parole – trikker

+0

J'ai ramené cette question à la version originale, puisque la nouvelle version est postée ailleurs (http://stackoverflow.com/questions/1191349/why-doesnt-this-change-the-txt-file) et la réponse ne correspond pas à la nouvelle version – Brian

Répondre

6

Je pense que vous voulez dire la conversion invalide de const char * à char

Lorsque vous indexez une chaîne que vous devez attribuer char pas une autre chaîne:

std::string s = "tie"; 
s[0] = 'l'; 
assert(s == "lie"); 
//s[0] = "l"; <--- not valid const char * to char 

Aussi, vous doit avoir à la fois un côté droit et un côté gauche pour chaque comparaison. Vous ne pouvez pas appliquer un côté gauche à plusieurs côtés droits en C++.

if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') 
    s[i] = ' '; 
+0

Ah je vois merci, y aurait-il un moyen plus court de faire la comparaison? – trikker

+0

Le code compile, mais le fichier texte ne change pas Je ne sais pas pourquoi, mais je suppose qu'il a quelque chose à voir avec les modes manquants dans l'argument fstream – trikker

+0

Vous pourriez faire d'autres choses comme voir si un caractère est dans une chaîne de caractères différents, mais je pense que c'est le plus clair.Si vous allez faire plus de 1 comparaison comme ça avec toutes les voyelles juste le faire dans une fonction appelez quelque chose comme bool isVowel (char c) –

0

La raison pour laquelle le fichier ne change pas parce que vous ne vident pas le flux