首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符重排程式:依指定欄位範圍擷取輸出

     編輯:關於C語言

程式 1.1 重排字符:標準輸入欄位範圍擷取工具

本程式從標準輸入讀取資料,第一行指定欄位範圍(成對出現,負數結束),後續每行輸入依指定範圍擷取字符並輸出。例如 0 3 10 12 -1 表示輸出第 0-3 欄與第 10-12 欄內容。

程式架構與核心函數

  • read_column_numbers:讀取欄位範圍數組,驗證成對性、清除殘留換行符
  • rearrange:處理輸入行,將指定欄位字符連接輸出
  • main:協調讀取、處理、輸出流程

關鍵程式碼片段

#define MAX_COLS 20
#define MAX_INPUT 1000

int read_column_numbers(int columns[], int max) {
    int num = 0, end_ch;
    while (num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0)
        num++;
    if (num % 2 != 0) { puts("Last column number is not paired."); exit(EXIT_FAILURE); }
    while ((end_ch = getchar()) != EOF && end_ch != '\n'); // 清除換行
    return num;
}

void rearrange(char *output, char const *input, int n_columns, int const columns[]) {
    int i, len = strlen(input), out_emp_i = 0;
    for (i = 0; i < n_columns; i += 2) {
        int nchars = columns[i+1] - columns[i] + 1;
        if (columns[i] >= len || out_emp_i == MAX_INPUT - 1) break;
        if (out_emp_i + nchars > MAX_INPUT - 1)
            nchars = MAX_INPUT - 1 - out_emp_i;
        strncpy(output + out_emp_i, input + columns[i], nchars);
        out_emp_i += nchars;
    }
    output[out_emp_i] = '\0';
}

執行流程說明

  1. 讀取第一行欄位規格,存入 columns 陣列
  2. 迴圈讀取後續每行輸入(gets)
  3. 呼叫 rearrange 依欄位範圍擷取字符
  4. 輸出原始輸入與處理結果對照

注意事項

  • 使用 gets 存在緩衝區溢位風險,實務建議改用 fgets
  • 欄位索引從 0 起算,超出行長度自動忽略
  • 輸出緩衝區滿時截斷處理

此程式展示了指標運算、字串處理、輸入解析等C語言核心技巧,適合作為文字處理工具開發的基礎範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved