Как создать строку, состоящую из символов, прочитанных из текстового файла?

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;
Теги:
string
char

2 ответа

0

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

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

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

Функция std :: getline() НЕ ОТОБРАЖАЕТ пустое пространство, такое как ','\t ', в то время как это будет передано через ifs >> word.

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. Я не совсем уверен, как работают потоки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню