2013-10-06 2 views
0

Я пытаюсь прочитать код и отформатировать его так, чтобы он отрезал и перешел к новой строке после определенного момента. Сначала я старался просто отображать последовательные символы и превращать их в новую строку после того, как количество символов, прочитанных в этот момент, превзошло предел. Однако, если слово будет перейдите к пределу, мне нужно, чтобы это слово начало новую строку. Поскольку я абсолютно не понимаю, как это сделать с помощью только символов, я решил попробовать использовать массив строк. Мой код выглядит следующим образомКак создать строку, состоящую из символов, считанных из текстового файла?

char ch; 
string words[999]; 
//I use 999 because I can not be sure how large the text file will be, but I doubt it would be over 999 words 
string wordscount[999]; 
//again, 999. wordscount will store how many characters are in the word 
int wordnum = 0; 
int currentnum = 0; 
//this will be used later 
while (documentIn.get(ch)) 
{ 
if (ch != ' ') 
//this makes sure that the character being read isn't a space, as spaces are how we differentiate words from each other 
{ 
cout << ch; 
//this displays the character being read 

На примерно здесь в моем коде, я хотел бы, чтобы «спасти» все символы в строке, пока символ не является пространством. Я не знаю, как это сделать. Может кто-нибудь помочь мне здесь? Я подумал, что это будет что-то вроде этого;

words[wordnum] = 'however i add up the characters' 
//assuming I would use a type of loop to keep adding characters until I reach a 
//space, I would also be using the ++currentnum command to keep track of how 
//many characters are in the word 
wordscount[wordnum] = currentnum; 
++wordnum; 
+0

Реализуйте операцию удаления iostream, пропуская пробел, вытаскивая строку 'std :: string', но использует ее для разграничения, и это можно сделать буквально в нескольких строках кода. – WhozCraig

+0

Я честно понятия не имел, что это значит, но я посмотрел на разделитель, и я думаю, что теперь понял? Я знаю, что я могу объявить разделитель пространства как 'std :: string delimiter =" ";", но я не знаю синтаксиса, как заставить его делать это для всей программы. Я хотел бы сделать какой-то цикл, вроде следующего: «синтаксис для разделения первого слова»; «первое слово» = слова [wordnum]; 'подсчитать количество символов в слове' = wordscount [wordnum]; словоnum ++; Я собираюсь сделать правильный путь? Как сделать синтаксис? – Bya413

ответ

0

Используйте поток входных файлов, чтобы закодировать слова, добавляя их в вектор, тогда vector.size() будет подсчитывать слова.

std::ifstream ifs("myfile.txt"); 

std::vector<std::string> words; 
std::string word; 
while (ifs >> word) 
    words.push_back(word); 

Пробел будет пропущен по умолчанию, и цикл while будет продолжаться до тех пор, пока не будет достигнут конец файла.

+0

Следующий код не работает. Файл не открывается через что-то вроде «myfile.txt», он предоставляется через параметр командной строки. Код 'char ch; while (documentIn.get (ch)) {} 'был действителен, но я не могу просто заменить ifs на documentIn. Я не совсем уверен, как работают потоки. – Bya413

0

Я понятия не имею, что вы действительно хотите сделать.

Если вы хотите, чтобы восстановить каждую строку из файла, вы можете сделать это следующим образом:

std::ifstream ifs("in"); 
std::vector<std::string> words; 
std::string word; 
while (std::getline(ifs, word)) 
{ 
    words.push_back(word); 
} 
ifs.close(); 

Функция зЬй :: GetLine() НЕ ПРОПУСТИТЬ белое пространство, например, «», «\ т ', тогда как это будет передано через ifs >> word.

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