Как я могу игнорировать & quot; конец строки & quot; или «Новая строка» символ при чтении текстовых файлов слово за словом?

Я читаю текстовый файл слово за словом и сохраняю каждое слово как элемент в массиве. Затем я распечатываю этот массив слово за словом. Я знаю, что это можно сделать более эффективно, но это для назначения, и я должен использовать массив.

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

У меня есть текстовый файл, который выглядит так:

beginning of filemore lines with some bizzare     spacing
some lines next to each other
while

others are farther apart
eof

Вот часть моего кода с itemsInArray инициализируется в 0 и массив слов, упоминаемых как wordArray[ (approriate length for my file ) ]:


ifstream infile;
infile.open(fileExample);

while (!infile.eof()) {

string temp;
getline(infile,temp,' ');  // Successfully reads words seperated by a single spaceif ((temp != "") && (temp != '\n') && (temp != " ") && (temp != "\n") && (temp != "\0") {
wordArray[itemsInArray] = temp;
itemsInArray++;
}

Мой код сохраняет символ конца строки как элемент в моем массиве. В моем утверждении if я перечислил все способы, которыми я пытался скрыть символ конца строки, но мне не повезло.

Как я могу предотвратить сохранение символа конца строки как элемента в моем массиве?

Я пробовал несколько других методов, которые я нашел на темы, похожие на это, в том числе что-то с *const char что я не мог сделать работу, а также перебирать и удалять символы новой строки. Я работал над этим часами, я не хочу повторять ту же проблему и перепробовал много разных методов.

1

Решение

Стандарт >> оператор перегружен для std::string уже использует пробел в качестве границы слова, поэтому ваша программа может быть значительно упрощена.

#include <iostream>
#include <string>
#include <vector>

int
main()
{
std::vector<std::string> words {};
{
std::string tmp {};
while (std::cin >> tmp)
words.push_back(tmp);
}
for (const auto& word : words)
std::cout << "'" << word << "'" << std::endl;
}

Для ввода, который вы показываете, это выведет:

'beginning'
'of'
'file'
'more'
'lines'
'with'
'some'
'bizzare'
'spacing'
'some'
'lines'
'next'
'to'
'each'
'other'
'while'
'others'
'are'
'farther'
'apart'
'eof'

Разве это не то, что вы хотите?

2

Другие решения

Оператор извлечения потока должен позаботиться об этом за вас.

std::ifstream ifs("file.txt");
while (ifs.good())
{
std::string word;
ifs >> word;
if (ifs.eof())
{
break;
}

std::cout << word << "\n";
}
0

int main()
{
char *n;
int count=0,count1=0;
ofstream output("user.txt");
output<<"aa bb cc";
output.close();
ifstream input("user.txt");
while(!input.eof())
{
count++;
if(count1<count)
cout<<" ";
count1=count;

input>>n;
cout<<n;
}
cout<<"\ncount="<<count;
getch();
}
0
По вопросам рекламы [email protected]