0

Проблема заключается в том как переходить на другие строки(1 строка = 1 предложение) и как записать эти строки в другой файл. Заранее благодарю. Пытался сделать через использование "алфавита" из чисел, но я немного не понимаю как происходит поиск этих самых предложений. Использование кода из похожих задач, но на одну строку и и без использования файлов ни к чему хорошему не привели. Да и вообще не до конца понимаю как пользоваться строками. Даже на самом деле не уверен правильно ли работает функция. Код ничего не выводит и я честно говоря не понимаю правильно ли я вообще хоть что-то сделал.

 using namespace std;
string date(string strdate, string number) {
    string sdate = "";
    for (int i = 0; i < 10; ++i) {
        for (int j = 0; j < 10; ++j) {
            if ((strdate[i] == number[j]) || (strdate[i] == '.')) {
                sdate += strdate[i];
            }
            else {
                break;
            }
        }
    }
    return sdate;
}

int main() {
    setlocale(LC_ALL, "RUS");
    string x;
    ifstream in("C\\Users\\kapto\\input.txt");
    ofstream out("C\\Users\\kapto\\buffer.txt");
    string str, sdate;
    string razdel = "!?,.:;- "; 
    string number = "1234567890";
    string::size_type pos = 0, k;
    k = str.find_first_of(razdel); 
    while (in.eof()) { 
        getline(cin, str);
        if (pos = str.find_first_of(number)) {
            string strdate = str.substr(pos, 10);
            sdate = date(strdate, number);
            if (sdate == "") {
                str.erase();
            }
        }
    }
    system("pause");
    return 0;
}

Kaptoshka
  • 13
  • 4

1 Answers1

1

И снова здравствуйте)

Вот пример кода с комментариями:

ifstream input("D:\\input.txt", ios::in);
//Буффер для предложения
char buffer[256];
buffer[0] = '\0';
//После того, как дошли до новой строчки в переменной size будет хранится размер предложения.
int size = 0;
char t;
while (!input.eof()) {
    size = 0;
    //Считываем по одному символу 
    while (input.read((char*)&t, sizeof(char))) {
        //Если считанный символ перевод на новую строку, то обрезаем конец у предложения
        if (t == '\n') {
            buffer[size] = '\0';
            //Тут можете вызывать функции проверки на дату.
            //Я знаю она у вас есть)
            //Если дата в предложении найдена то просто записываете в новый файл
            //Как это делать я думаю вы уже умеете
            break;
        }
        buffer[size] = t;
        ++size;
    }
    if (input.eof() && size > 0) buffer[size] = '\0';
    cout << buffer << endl;
}
  • 1
    Не делайте так - while (!input.eof()) { - https://ru.stackoverflow.com/q/833980/195342 – Harry Dec 15 '20 at 05:23
  • @Harry хмм да вы правы. Во вложенном цикле одна лишняя точка считывалась. Максимально не критично конечно, но все равно спасибо за замечание. – Павел Ериков stand with Russia Dec 15 '20 at 06:49