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

C語言字符與字符串基礎:ASCII、編碼與輸入輸出實戰

     編輯:關於C語言

字符與字符串是程序處理文本的基石。C 語言以 char 類型為核心,配合 ASCII 編碼,構建了極簡卻強大的文本處理模型。本文從存儲本質、輸入輸出、常見操作三個維度建立完整認知。

一、字符在內存中的真相

  • 本質:char 是整數類型(通常 1 字節),存儲的是編碼值而非圖形符號。
  • 編碼:ASCII 碼將字符映射為 0~127(擴展 ASCII 至 255)。
  • 關鍵對應:'A'=65、'Z'=90、'a'=97、'z'=122、'0'=48、空格=32。
#include <stdio.h>

int main(void) {
    char c1 = 'A';
    char c2 = 65;          // 直接賦 ASCII 值
    
    printf("字符: %c, ASCII: %d\n", c1, c1);  // 字符: A, ASCII: 65
    printf("字符: %c, ASCII: %d\n", c2, c2);  // 字符: A, ASCII: 65
    
    // 遍歷可打印字符
    for (int i = 32; i < 127; ++i) {
        printf("%3d: %c  ", i, i);
        if ((i - 31) % 8 == 0) putchar('\n');
    }
    return 0;
}

二、字符串的本質與聲明

三、核心輸入輸出函數

// 輸出
putchar(ch);           // 單字符
puts(str);             // 字符串 + 自動換行
printf("%c %s", ch, str); // 格式化

// 輸入(安全優先)
int ch = getchar();    // 單字符,返回 EOF(-1) 表示結束
fgets(buf, sizeof(buf), stdin); // 整行,含換行符
// scanf("%19s", buf); // 單詞,需限制寬度防溢出

四、字符分類與轉換 (<ctype.h>)

#include <ctype.h>

int main(void) {
    char c = 'a';
    printf("isalpha: %d\n", isalpha(c));   // 1
    printf("isdigit: %d\n", isdigit(c));   // 0
    printf("toupper: %c\n", toupper(c));   // A
    printf("tolower: %c\n", tolower('Z')); // z
    return 0;
}

注意:ctype.h 函數參數為 int,需保證值為 unsigned char 或 EOF,否則負值行為未定義。安全調用:toupper((unsigned char)c)。

五、字符串常用操作 (<string.h>)

聲明方式內存模型可修改性生命週期
char *s = "hello";指向只讀數據段不可修改(UB)程序全期
char s[] = "hello";棧上數組,內容為拷貝可修改作用域結束
char *s = malloc(6); strcpy(s, "hello");堆內存可修改手動 free
函數用途備註
strlen長度(不含 \0)O(n),勿放在循環條件中重複調用
strcpy/strncpy拷貝strncpy 不保證以 \0 結尾,需手動補
strcat/strncat拼接目標空間需足夠
strcmp/strncmp比較返回 <0, 0, >0
strchr/strrchr查找字符返回指針或 NULL
strstr查找子串返回指針或 NULL

六、完整示例:統計輸入行的字符類型

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void) {
    char line[1024];
    puts("請輸入文本 (空行結束):");
    
    while (fgets(line, sizeof(line), stdin)) {
        if (line[0] == '\n') break;  // 空行退出
        
        int letters = 0, digits = 0, spaces = 0, others = 0;
        for (size_t i = 0; line[i] && line[i] != '\n'; ++i) {
            unsigned char uc = line[i];
            if (isalpha(uc)) letters++;
            else if (isdigit(uc)) digits++;
            else if (isspace(uc)) spaces++;
            else others++;
        }
        printf("字母:%d 數字:%d 空格:%d 其他:%d\n", letters, digits, spaces, others);
    }
    return 0;
}

理解字符即整數、字符串即以 \0 結尾的字符數組、輸入必須檢查邊界,這三個核心認知將讓你在 C 語言文本處理中游刃有餘。

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