Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมพิมพ์ 10 บรรทัดสุดท้ายใน C++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมพิมพ์ 10 บรรทัดสุดท้ายจากสตริงที่กำหนด

เราจะได้รับสตริงที่ประกอบด้วยอักขระขึ้นบรรทัดใหม่ (newline) เพื่อระบุจุดเริ่มต้นของบรรทัดถัดไป งานคือเริ่มจากท้ายและพิมพ์ทั้ง 10 บรรทัดนับจากท้าย

ตัวอย่างโค้ด

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

#define DELIM '\n'

// พิมพ์ 10 บรรทัดสุดท้าย
void print_last_lines(char* str, int n) {
    if (n <= 0)
        return;

    size_t cnt = 0; // เก็บจำนวนบรรทัด
    char* target_pos = NULL;

    // หาตำแหน่งเริ่มต้นของบรรทัดสุดท้าย
    target_pos = strrchr(str, DELIM);
    if (target_pos == NULL) {
        cout << "Given string is a single line string";
        return;
    }

    // ย้ายไปตำแหน่งเริ่มต้นของบรรทัดที่ 1 (นับจากท้าย)
    while (cnt < n) {
        // ย้ายไปบรรทัดถัดไป
        while (str < target_pos && *target_pos != DELIM)
            --target_pos;
        if (*target_pos == DELIM)
            --target_pos, ++cnt;
        // ถ้าสตริงมีน้อยกว่า 10 บรรทัด ให้ break
        else
            break;
    }

    if (str < target_pos)
        target_pos += 2;

    cout << target_pos << endl;
}

int main(void) {
    char* str1 = "str1\nstr2\nstr3\nstr4\nstr5\nstr6\nstr7\nstr8\nstr9"
                 "\nstr10\nstr11\nstr12\nstr13\nstr14\nstr15\nstr16\nstr17"
                 "\nstr18\nstr19\nstr20\nstr21\nstr22\nstr23\nstr24\nstr25";

    print_last_lines(str1, 10);
    return 0;
}

ผลลัพธ์

str16 str17 str18 str19 str20 str21 str22 str23 str24 str25