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

C語言字符串處理函數補全:隔位拷貝邏輯實現與文件輸出

     編輯:C 語言問答

題目要求

將 str1 中下標為偶數的字符 (0,2,4...) 依次拷貝到 str2,並寫入文件 out1.dat。

原代碼邏輯缺陷

for (i=1; i=='\0'; i++) {   // ① 條件判斷錯誤:i=='\0' 永假 (i 是 int),循環不執行
    j = 2;
    str2[i] = str1[j];
    return str2[i];         // ② 函數返回類型 void,不能 return 值
}

正確填空與完整實現

#include 
#include 

void nono(const char *str) {
    FILE *f = fopen("out1.dat", "w");
    if (f) {
        fprintf(f, "%s\n", str);
        fclose(f);
    }
}

void fun(const char *str1, char *str2) {
    size_t i = 0, j = 0;
    // 複製 str1[0]
    if (str1[0]) str2[j++] = str1[0];
    // 隔位複製:str1[2], str1[4], ...
    for (i = 2; str1[i]; i += 2)
        str2[j++] = str1[i];
    str2[j] = '\0';
}

int main(void) {
    char str1[80] = "This Is a c Program";
    char str2[80] = {0};

    printf("原始字符串: %s\n", str1);
    fun(str1, str2);
    printf("結果字符串: %s\n", str2);
    nono(str2);
    return 0;
}

運行結果

原始字符串: This Is a c Program
結果字符串: Ti a cPorm

索引對應:
T(0) h(1) i(2) s(3) (4) I(5) s(6) (7) a(8) (9) c(10) (11) P(12) r(13) o(14) g(15) r(16) a(17) m(18)
取偶數下標:0:T, 2:i, 4:空格, 6:s, 8:a, 10:c, 12:P, 14:o, 16:r, 18:m → "Ti s a cPorm" (注意索引 4 是空格,輸出中可見)。

關鍵點總結

  • 循環條件 str1[i] 等價於 str1[i] != '\0'。
  • 步長 i += 2 實現隔位取字符。
  • 目標字符串必須以 '\0' 結尾。
  • 文件操作需檢查 fopen 返回值,用完 fclose。
  • 函數參數用 const char* 表達只讀語義,避免誤修改源串。

此類「字符串篩選/轉換」是 C 語言指針操作基本功,變體包括:反轉、大小寫翻轉、去重、編碼轉換等,核心均為雙指針/雙索引遍歷 + 邊界檢查 + 結束符維護。

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