2009-07-27 4 views
1

Я пытаюсь удалить гласные из текстового файла, и у меня проблемы. Я получаю ошибку компилятора в строке-говоряНеверное преобразование из const char в char - Удаление Vowel

invalid conversion from const char to char 

Я уверен, что это должно сделать с тем, как я настраиваю файловый поток в своем коде. Я использую fstream, поскольку он используется для чтения и записи, но я не включил ни один из открытых режимов, потому что я думал, что могу писать и читать в/из файла без них (я уверен, что вы должны использовать один , Я просто не уверен, какой из них.) Кроме того, я не уверен, что способ, которым я устанавливаю оператор equals, является законным или нет (будет ли он читать его, как если бы s [i] равно a или e или i или o или u).

Код:

#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

Вы должны принять один из ответов на ваш первоначальный вопрос, и вместо того, чтобы редактировать эту, открыть новый вопрос для вашей другой проблемы. –

+0

Хорошо. Как правило, у меня создалось впечатление, что вы должны просто отредактировать свой вопрос, если у вас есть другой, но я возьму ваше слово за это. – trikker

+0

Я вернул этот вопрос в исходную версию, так как новая версия опубликована в другом месте (http://stackoverflow.com/questions/1191349/why-doesnt-this-change-the-txt-file), и ответ не соответствует новой версии. – Brian

ответ

6

Я думаю, что вы имеете в виду недопустимое преобразование из const char * в char

При индексировании строку следует присвоить символ не другая строка:

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

Также вы для каждого сравнения должны иметь как правую сторону, так и левую сторону. Вы не можете применить одну левую сторону к нескольким правым сторонам в C++.

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

Я вижу благодарность. Был бы более короткий путь к сделать сравнение? – trikker

+0

Код компилируется, но текстовый файл не изменяется. Я не уверен, почему, но я предполагаю, что это имеет какое-то отношение к отсутствующим режимам в аргументе fstream. – trikker

+0

Вы могли бы сделать некоторые другие вещи например, если символ содержит строку разных символов, но я думаю, что это наиболее ясно. Если вы собираетесь сделать более одного сравнения, как это со всеми гласными, просто превратите его в вызов функции, например, bool isVowel (char c) –

0

Причина файл не изменится, потому что вы не сбрасываете поток