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

C 字符串函數深度剖析:strcpy、strcmp、strlen 多種實現對比

     編輯:C++ 入門

字符串複製 strcpy

版本 1:下標遍歷

void strcpy1(char str1[], char str2[]) {
    int i = 0;
    for (; str2[i] != '\0'; ++i) str1[i] = str2[i];
    str1[i] = '\0';
}

版本 2:賦值表達式巧用

void strcpy2(char str1[], char str2[]) {
    int i = 0;
    while (str1[i] = str2[i]) ++i;  // 賦值結果即為字符值,'\0' 為假結束循環
}

版本 2 更簡潔,利用 C 語言「賦值表達式的值即為賦值結果」的特性,無需額外判斷。

字符串長度 strlen

版本 1:下標計數

int strlen1(char str[]) {
    int i = 0;
    while (str[i] != '\0') ++i;
    return i;
}

版本 2:指針相減

int strlen2(char *str) {
    char *t = str;
    while (*str != '\0') ++str;
    return str - t;  // 指針差即為元素個數
}

版本 2 體現指針算術優雅性,無需計數變量。

字符串比較 strcmp

版本 1:下標遍歷

int strcmp1(char str1[], char str2[]) {
    int i = 0;
    for (; str1[i] != '\0'; ++i)
        if (str1[i] != str2[i]) break;
    return str1[i] - str2[i];  // 返回首個不同字符的 ASCII 碼差
}

版本 2:指針遍歷

int strcmp2(char *str1, char *str2) {
    for (; *str1 != '\0'; ++str1, ++str2)
        if (*str1 != *str2) break;
    return *str1 - *str2;
}

版本 2 直接操作指針,更符合 C 風格,且避免下標計算開銷。

核心差異總結

函數下標版指針版優勢
strcpy直觀易懂賦值表達式隱式判斷指針版更簡潔高效
strlen需計數器指針相減得長度指針版無額外變量
strcmp邊界檢查明確指針同步推進指針版碼更短

教訓

掌握指針版本不僅能寫出更地道的 C 代碼,更能深入理解「數組退化為指針」、「賦值表達式有值」、「指針算術」等核心概念。面試與底層開發中極常考察。

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