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

《C和指針》第9章習題解答:字符串操作函數手寫實現大全

     編輯:關於C語言

《C和指針》第9章習題解答:字符串操作函數手寫實現大全

第 9 章專注字符串處理:分類統計、複製、連接、查找、加密等經典算法。

習題精選

9.1 字符分類統計

用 ctype.h (isalpha、isdigit 等) 統計控制字符、空白、數字、大小寫、標點、不可打印字符個數與佔比。

9.3/9.4/9.5 安全複製/連接

// my_strcpy: 限制長度防溢出
void my_strcpy(char *dst, char *src) {
    size_t n = strlen(dst) < strlen(src) ? strlen(dst) : strlen(src);
    strncpy(dst, src, n);
}

// my_strcat: 確保目標緩衝區不溢出
void my_strcat(char *dst, char *src) {
    size_t space = MAX - strlen(dst) - 1;
    strncat(dst, src, space < strlen(src) ? space : strlen(src));
}

9.6 返回複製後尾指針

char *my_strcpy_end(char *dst, char *src) {
    if (strlen(dst) >= strlen(src)) strcpy(dst, src);
    else strncpy(dst, src, strlen(dst));
    while (*dst) dst++;
    return dst; // 指向結束符
}

9.8 第 n 次出現字符位置

char *my_strnchr(const char *s, int ch, int n) {
    for (int i=0; i

9.9 統計字符集出現次數

int count_chars(const char *s, const char *set) {
    int cnt = 0;
    while ((s = strpbrk(s, set))) { cnt++; s++; }
    return cnt;
}

9.10 回文判斷 (忽略非字母、大小寫)

int palindrome(char *s) {
    char *t = malloc(strlen(s)+1);
    int j=0;
    for (int i=0; s[i]; i++) if (isalpha(s[i])) t[j++] = tolower(s[i]);
    t[j] = '\0';
    for (int i=0; i

9.12-9.14 替換密碼加密/解密

構建密鑰字母表 (去重關鍵字 + 剩餘字母),建立雙向映射表,實現加密 encrypt 與解密 decrypt。

9.15 金額格式化 ($1,234.56)

從右向左每三位插入逗號,小數點後固定兩位,不足補零。

9.16 數字字符串按格式字符串對齊填充

格式串含 #、,、.,從右向左將數字填入 # 位,其餘字符保留,不足填 0/空格。

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