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

C語言字符串拼接實戰:無庫函數、無冗餘、O(n)極簡實現

     編輯:C 語言入門

刷題遇到「不調用任何庫函數實現字符串拼接」,許多人寫得過於複雜甚至上鏈表。核心只有一點:**C 字符串以 `\0` 結尾**。掌握這點,幾行代碼即可 AC。

題目要求

  • 輸入:多行,每行兩字符串 (長度 ≤100)
  • 輸出:拼接後字符串
  • 限制:不使用 `` 任何函數

極簡 AC 代碼

#include <stdio.h>
#include <stdlib.h>

void contact(char *str, const char *str1, const char *str2);

int main() {
    char str[201], str1[101], str2[101];
    while (scanf("%s%s", str1, str2) != EOF) {
        contact(str, str1, str2);
        printf("%s\n", str);
    }
    return 0;
}

void contact(char *str, const char *str1, const char *str2) {
    int i, j;
    for (i = 0; str1[i] != '\0'; i++) str[i] = str1[i];  // 複製 str1
    for (j = 0; str2[j] != '\0'; j++) str[i + j] = str2[j]; // 接續 str2
    str[i + j] = '\0';  // 關鍵:補終結符
}

核心邏輯拆解

  1. 第一輪循環:`i` 從 0 遞增,直達 `str1` 的 `\0`,將字符逐個拷貝到 `str`。
  2. 第二輪循環:`j` 從 0 遞增,直達 `str2` 的 `\0`,拷貝到 `str[i+j]` 實現尾部拼接。
  3. 雙循環結束後,`i` = `str1` 長度,`j` = `str2` 長度,`str[i+j]` 寫入 `\0` 封閉新串。

複雜度分析

  • 時間:O(m+n) — 單遍歷,無嵌套。
  • 空間:O(1) 額外 — 僅用計數器 `i`、`j`。

易錯點提醒

  • 忘記寫入終結符 `\0` → 打印亂碼或崩潰。
  • 緩衝區 `str` 大小不足 (需 ≥ len1+len2+1) → 溢出。
  • 輸入含空格時 `%s` 會截斷,題目明確「字符串」無空格,故安全。

舉一反三:strcpy/strcat 手寫版

// strcpy
void my_strcpy(char *dst, const char *src) {
    while ((*dst++ = *src++));
}

// strcat
void my_strcat(char *dst, const char *src) {
    while (*dst) dst++;  // 定位到 \0
    while ((*dst++ = *src++));
}

面試手寫字符串操作,**只要記住 `\0` 遍歷拷貝**,所有變體信手拈來。

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