У меня есть текстовый файл:
7
a
bkjb
c
dea
hash_table
- это массив, в котором номер line no.-2=index of hash_table array
который соответствует каждой строке, соответствует элементу в массиве. Элемент может быть пустой строкой или символом типа "a\n"
который будет выглядеть в текстовом файле:
a
//empty line
Первый номер используется для определения размера массива hash_table
. Оператор << не обрабатывает пустую строку или '\n' char как строку и, следовательно, не добавляет в массив. Я пробовал это, но не использовал. Вот моя попытка:
ifstream codes ("d:\\test3.txt"); //my text file
void create_table(int size, string hash_table[]) //creating array
{ string a;
for(int i=0;i<size;i=i+1)
{
codes>>a;
char c=codes.get();
if(codes.peek()=='\n')
{char b=codes.peek();
a=a+string(1,b);
}
hash_table[i]=a;
a.clear();
}
}
void print(int size, string hash_table[])
{
for(int i=0;i<size;i=i+1)
{if(!hash_table[i].empty())
{cout<<"hash_table["<<i<<"]="<<hash_table[i]<<endl;}
}
}
int main()
{
int size;
codes>>size;
string hash_table[size];
create_table(size, hash_table);
print(size, hash_table);
}
ПРИМЕЧАНИЕ: может быть любой нет. пустых строк со случайной последовательностью.
Используйте std::getline()
вместо std::ifstream::operator >>()
. Оператор >>
пропускает пробелы, в том числе символы новой строки.
std::string line;
while (std::getline(codes, line)) {
//...do something with line
}
eof()
вы почти наверняка делаете это неправильно. Это условие прекратится, когда он попытается прочитать за последней строкой.
std::getline
иstd::string::empty
.