2014-10-22 1 views
0

У меня есть код, который читается в текстовом файле и превращает каждое слово из файла в массив символов (должен быть массивом символов, без строк), который является членом данных класса Word. Когда встречается пунктуация, все объекты Word хранятся в классе Sentence как связанный список. Когда табуляция встречается, все предыдущие предложения хранятся в классе Paragraph как связанный список. Мне нужна помощь, чтобы проверить '\ t' в текстовом файле. Я читаю в использованиикак проверить ' t'?

while(myFile >> charArray){ 
//stuff 
} 

Как это говорится в полном слове и сохраняет его в charArray. Если это конец предложения, charArray[size] (размер является последним элементом), будет == '.' || == "!" || == "?", поэтому я могу обрабатывать каждый раз новый Sentence (я могу предположить, что текстовый файл будет правильно отформатирован каждый раз). То, что я не знаю, как это сделать, - это проверить символ «\ t», чтобы создать новый абзац. Будет ли '\ t' поднят на myFile >> charArray? Я пытался возиться с различными операциями if, чтобы увидеть, могу ли я взять символ '\ t', но я не смог. Итак, как я могу проверить вкладку во время чтения из текстового файла в массив символов?

+1

Лично я бы сделать это хороший старомодный K & R путь: [fgetc()] (http://linux.die.net/man/3/fgetc). – FoggyDay

+4

Предлагаю: 1. Прочитайте файл по строкам. 2. Найдите '' \ t'' в строке и разделите строку на вкладках. 3. Обработайте каждый раздел разделенной строки с помощью 'istrstream'. –

+0

Это код C, если вы не используете 'std :: string', что вы должны быть, потому что альтернатива ужасающая. – tadman

ответ

0

Это может помочь вам/быть то, что ищете:

http://www.cplusplus.com/reference/cstring/strchr/

ваш интерес к перегрузке, предоставленной C++:

символ * strchr (символ * ул, внутр характер);

это вернет указатель на первое появление символа или нулевой указатель, если он не найден.

Пример использования (предоставленной Cplusplus.com, а) можно найти здесь:

/* strchr example */ 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[] = "This is a sample string"; 
    char * pch; 
    printf ("Looking for the 's' character in \"%s\"...\n",str); 
    pch=strchr(str,'s'); 
    while (pch!=NULL) 
    { 
    printf ("found at %d\n",pch-str+1); 
    pch=strchr(pch+1,'s'); 
    } 
    return 0; 
}  
+0

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

+0

Спасибо, я не думал об этом –

1

iostreams operator>>, по умолчанию, читать и отбрасывать ведущие пробелы. Включая ваш символ табуляции, который начинает новый абзац. Я предлагаю, чтобы пустая строка также считалась разделителем абзаца. И многие люди используют пробег обычных символов пробела в начале строки, чтобы создать отступы, а не вкладку, поэтому вы тоже должны это проверить.

Мой предпочтительный подход состоял в том, чтобы использовать getline для чтения целой строки текста, пробелов и всего. Проверьте первый символ и решите, следует ли начинать новый абзац. Затем загрузите эту строку в строковый поток и используйте operator>>, чтобы вытащить отдельные слова. Это очень похоже на комментарий R Sahu ... но я бы не разделил строку на символы табуляции. Скорее, вас интересуют закладки/пробелы только в начале строки.

Вы можете также экспериментировать с noskipws и reading individual whitespace characters

+0

Как бы я прочитал с использованием getline? Я оглядываюсь, и я не уверен, что понял. Я объявил 'char line [256];', а затем попытался использовать 'getline (myFile, line);', но я получаю сообщение об ошибке, не вызывающей соответствующего вызова функции. Я включил . Итак, что мне нужно сделать, чтобы получить строку ввода-вывода в массив символов буфера? –

+0

@TommyK: Это синтаксис для чтения в 'std :: string', который в вашем вопросе говорит, что вам запрещено использовать. [Версия char-array] (http://en.cppreference.com/w/cpp/io/basic_istream/getline) является функцией-членом, поэтому вы должны сказать 'myFile.getline (строка, 256);' –

Смежные вопросы