Я читаю текстовый файл слово за словом и сохраняю каждое слово как элемент в массиве. Затем я распечатываю этот массив слово за словом. Я знаю, что это можно сделать более эффективно, но это для назначения, и я должен использовать массив.
Я делаю больше с массивом, таким как подсчет повторяющихся элементов, удаление определенных элементов и т. Д. Я также успешно преобразовал файлы в строчные и без знаков препинания.
У меня есть текстовый файл, который выглядит так:
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
что я не мог сделать работу, а также перебирать и удалять символы новой строки. Я работал над этим часами, я не хочу повторять ту же проблему и перепробовал много разных методов.
Стандарт >>
оператор перегружен для 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'
Разве это не то, что вы хотите?
Оператор извлечения потока должен позаботиться об этом за вас.
std::ifstream ifs("file.txt");
while (ifs.good())
{
std::string word;
ifs >> word;
if (ifs.eof())
{
break;
}
std::cout << word << "\n";
}
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();
}