2015-04-10 2 views
-5

У меня есть программа на C++, где она принимает данные из файла. В данном файл выглядит следующим образом:обратный порядок строки в C++

это линия 1

это линия 2

это линия 3

Вот как я прочитал его.

ifstream file; 
std::string list[max], temp; 

file.open("file"); 
int i=0; 
while (getline (file, temp)) //while the end of file is NOT reached 
{ 
    list[i] = temp; 
    i++; 
} 
file.close(); 

Теперь то, что я делаю, это запустить цикл следующим образом

for(i=0; i<no_of_lines; i++){ 
    temp = list[i]; 


} 

Что я хочу, чтобы полностью изменить линию. Например, в строке 1 данные 'это строка 1' и обновить данные в temp, так как '1 строка это'

Как я могу это достичь?

+2

'станд :: строка назад (список [я] .rbegin(), список [я] .rend());' – Borgleader

+0

Вы хотите поменять местами слова, но не каждая личная буква, правильно? – NKamrath

+0

Поместите свой вопрос в сообщение, а не где-нибудь в вашем коде. (Только это, кстати, это не очень хороший вопрос.) – usr2564301

ответ

0

Я бы использовал std::vector вместо фиксированного массива и std::reverse. Это решение также сделает ваш код действительным для любого количества входных строк.

Полный код:

typedef vector<string> StrVec; 

ifstream file; 
string temp; 
StrVec strings; 

file.open("file"); 
while(getline (file, temp)) 
{ 
    strings.push_back(temp); 
} 
file.close() 

printf("Before reverse:\n\n"); 
for(StrVec::iterator i = strings.begin(); i != strings.end(); ++i) 
{ 
    printf("%s\n", i->c_str()); 
} 

std::reverse(strings.begin(), strings.end()); 

printf("\nAfter reverse:\n\n"); 
for(StrVec::iterator i = strings.begin(); i != strings.end(); ++i) 
{ 
    printf("%s\n", i->c_str()); 
} 
Смежные вопросы