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

C++ 字符串操作實現:strcat、strcmp、strlen 手寫版本與主函數調用

     編輯:程式設計疑難解答

實驗要求

輸入兩個字符串,分別用自定義函數實現:

  • void str_cat(char* p1, char* p2):拼接 p2 到 p1 末尾
  • int str_cmp(char* p1, char* p2):比較兩字符串,返回差值
  • int str_len(char* p1, char* p2):返回兩字符串總長度

運行後顯示:1. 比較結果 2. 拼接後字符串 3. 總長度

原代碼問題分析

  • str_cat 直接用庫函數 strcat,未體現指針操作邏輯。
  • str_cmp 返回值未在 main 中接收打印。
  • str_len 參數表與聲明不符(聲明兩參數,定義一參數),且未輸出結果。
  • main 中調用順序與輸出要求不符。

標準手寫實現(教學級)

#include <stdio.h>

// 拼接:p1 需有足夠空間
void str_cat(char *p1, char *p2) {
    while (*p1 != '\0') p1++;        // 移動到 p1 末尾
    while (*p2 != '\0') {            // 複製 p2 內容
        *p1 = *p2;
        p1++; p2++;
    }
    *p1 = '\0';                      // 結束符
}

// 比較:逐字符比較,返回首個不同字符的 ASCII 差值
int str_cmp(char *p1, char *p2) {
    while (*p1 != '\0' && *p2 != '\0') {
        if (*p1 != *p2) return *p1 - *p2;
        p1++; p2++;
    }
    return *p1 - *p2;  // 處理長度不同但前綴相同的情況
}

// 計算兩字符串總長度
int str_len(char *p1, char *p2) {
    int n = 0;
    while (*p1++ != '\0') n++;
    while (*p2++ != '\0') n++;
    return n;
}

int main() {
    char s1[100] = "hello ";  // 須預留足夠空間容納拼接結果
    char s2[] = "world!";

    // 1. 拼接
    str_cat(s1, s2);
    printf("拼接結果: %s\n", s1);

    // 2. 比較
    int cmp = str_cmp("aaa", "ab");
    printf("比較結果: %d\n", cmp);

    // 3. 總長度
    int len = str_len("aaa", "ab");
    printf("總長度: %d\n", len);

    return 0;
}

運行輸出示例

拼接結果: hello world!
比較結果: -1
總長度: 5

學習要點

  • 字符串以 \0 結尾,指針遍歷核心是 while (*p != '\0')。
  • str_cat 需確保目標緩衝區足夠大,否則緩衝區溢出。
  • str_cmp 返回值語義:< 0 表示 p1 < p2,=0 相等,>0 表示 p1 > p2。
  • 函數聲明與定義參數個數、類型必須一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved