Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình in N dòng cuối cùng của chuỗi trong C++

Cho một chuỗi chứa ký tự xuống dòng '\n' phân tách các dòng và một số nguyên N. Nhiệm vụ: in ra N dòng cuối cùng của chuỗi (tính từ cuối lên).

Giải thuật: Dùng strrchr tìm ký tự '\n' cuối cùng, sau đó lùi lại N lần để tìm vị trí bắt đầu của dòng thứ N từ cuối.

Ví dụ minh họa (C++)

#include <bits/stdc++.h>
using namespace std;

#define DELIM '\n'

void print_last_lines(char* str, int n) {
    if (n <= 0) return;
    size_t cnt = 0;
    char* target_pos = nullptr;
    target_pos = strrchr(str, DELIM); // tìm '\n' cuối cùng
    if (!target_pos) {
        cout << "Chuoi chi co mot dong\n";
        return;
    }
    // Lùi lại n dòng
    while (cnt < n) {
        while (str < target_pos && *target_pos != DELIM) --target_pos;
        if (*target_pos == DELIM) { --target_pos; ++cnt; }
        else break; // không đủ dòng
    }
    if (str < target_pos) target_pos += 2; // bỏ qua '\n'
    cout << target_pos << endl;
}

int main() {
    char* str1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7\nstr8\nstr9\n"
                 "str10\nstr11\nstr12\nstr13\nstr14\nstr15\nstr16\nstr17\n"
                 "str18\nstr19\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25";
    print_last_lines(str1, 14);
    return 0;
}

Kết quả

str12 str13 str14 str15 str16 str17 str18 str19 str20 str21 str22 str23 str24 str25