Есть программа со строками, в которой ничего не понимаю, знаю только, что она делает

Сейчас, наверное будет максимально тупой вопрос. Вот сама программа, которая форматирует текст, чтобы каждая строка содержала одно предложение и удалялись лишние пробелы - это один аутпут. Второй аутпут это отформатированный текст выводит слова задом наперед. Так вот тот самый тупой вопрос: В каком месте кода прописано про задом наперед? Пожалуйста, не нужно писать про мою тупость, и так знаю

#include <QCoreApplication>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const char* separators = "\n !@:?#$%^&*()_+{}\\|/,.!-";
bool isSeparator(char ch)
{
    for (int i=0;i<strlen(separators);i++)
        if (separators[i]==ch) return true;
    return false;
}
bool isNumeric(char ch)
{
    return (ch>='0' && ch<='9');
}
string reverse_content(const char* charstr)
{
    string result="";
    for (int i=strlen(charstr)-1;i>=0;i--)
        result+=charstr[i];
    return result;
}
int process_data(string input_filename,string output_filename,bool reverse=false)
{
    ifstream ifile(input_filename);
    ofstream ofile(output_filename);
    string word;
    string line;
    string new_line;
    if (ifile.is_open())
    {
          if (!ofile.is_open()) return 0;
          while ( getline (ifile,line) )
          {
            word = "";
            new_line = "";
            //
            char* str = (char*)line.c_str();
            int len=strlen(str);
            char prev_c='\n';
            for (int i=0;i<=len;i++)
            {
                char c=i<len?str[i]:'\n';
                if (isSeparator(c))
                {
                    if (c==' ' && ((word.length()==0 && new_line.length()==0) || prev_c==' '))
                    {
                        // пробелы в начале или несколько пробелов между словами - ничего не делаем
                    } else
                    if (c=='-' && i+1!=len && isNumeric(str[i+1]))
                    {
                        // это число со знаком минус
                        word+=c;
                    } else
                    {
                        if (word.length()>0)
                        {
                            if (reverse)
                            {
                                word = reverse_content(word.c_str());
                            }
                        new_line+=word;
                        }
                        if (c=='.' && prev_c == ' ')
                        {
                            // нужно удалить пробел перед точкой
                            new_line.erase(new_line.length()-1);
                        }
                        if (c!='\n') new_line+=c;
                        if (c=='.' || c=='\n')
                        {
                            if (new_line.length()>0 && new_line!=".") ofile << new_line << '\n';
                            new_line="";
                            word="";
                        }
                        word = "";
                    }
                } else word+=c;
                prev_c = c;
            }
            if (new_line.length()>0)
            ofile << new_line;
          }
    } else return 0;
    ifile.close();
    ofile.close();
    return 1;
}
int main(){

    setlocale(LC_ALL,"Rus"); // Подключение русского языка

        string input = "input.txt";
        string output1 = "output.txt";
        string output2 = "output2.txt";
    int res=process_data(input,output1,false);
    if (res)
    {
        cout<<input<<" to "<<output1<<" - OK\n";
    } else
    {
        cout<<input<<" to "<<output1<<" - ERROR\n";
        return 0;
    }
    res=process_data(output1,output2,true);
    cout<<output1<<" to "<<output2<<" - "<<(res?"OK\n":"ERROR\n");
    return 0;
}

Ответы (2 шт):

Автор решения: Юрий Козлов

Разберите внимательно вот этот фрагмент кода:

string reverse_content(const char* charstr)
{
    string result="";
    for (int i=strlen(charstr)-1;i>=0;i--)
        result+=charstr[i];
    return result;
}

Обратите внимание на цикл for. Он перебирает символы входной строки и добавляет их в результирующую. Эту задачу выполняет вот эта строка:

    result+=charstr[i];

А то, как построено условие цикла:

i=strlen(charstr)-1;i>=0;

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

→ Ссылка
Автор решения: efgdg sDGsg

Вот это:

string reverse_content(const char* charstr)
{
    string result="";                      // то куда будет записан результат
    for (int i=strlen(charstr)-1;i>=0;i--) // с конца charstr строки в начало result записывается
        result+=charstr[i]; //реверс
    return result; // ну тут понятно
}
→ Ссылка