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

C++ 字符大小寫轉換函數完整指南:ctype.h 標準庫用法

     編輯:關於C++

核心函數速查表

功能函數頭文件備註
判斷小寫islower(c)<cctype>返回非零=真
判斷大寫isupper(c)<cctype>
小寫→大寫toupper(c)<cctype>非字母原樣返回
大寫→小寫tolower(c)<cctype>

標準用法模式

#include 
#include 

char str[100];
scanf("%s", str);
for (int i = 0; str[i]; ++i) {
    if (islower(str[i])) str[i] = toupper(str[i]);
    else if (isupper(str[i])) str[i] = tolower(str[i]);
}
printf("%s\n", str);

關鍵注意事項

  1. 參數類型:函數接受 int,但值必須是 unsigned char 或 EOF。若 `char` 為有符號類型,負值會導致未定義行為!
  2. 安全調用:`toupper((unsigned char)str[i])`
  3. 區域設置影響:`setlocale` 會改變字母判斷範圍(如德語 ß)
  4. 非字母字符:`toupper`/`tolower` 對非字母原樣返回

C++ 風格替代方案

// C++11 locale 感知
#include 
std::locale loc;
for (char& c : str) c = std::toupper(c, loc);

// 標準算法
#include 
std::transform(str, str+len, str, ::toupper);  // 全大寫
std::transform(str, str+len, str, [](char c){ return std::islower(c) ? std::toupper(c) : std::tolower(c); });  // 大小寫互換

完整示例:大小寫互換

#include 
#include 
#include 
#define MAXN 21
using namespace std;

char str[MAXN];

int main() {
    cin >> str;
    for (int i = 0; i < strlen(str); ++i) {
        if (islower((unsigned char)str[i]))
            str[i] = toupper((unsigned char)str[i]);
        else if (isupper((unsigned char)str[i]))
            str[i] = tolower((unsigned char)str[i]);
    }
    cout << str << endl;
    return 0;
}

擴展:ASCII 碼手動轉換 (無庫依賴)


// 僅適用 ASCII 字符集
if ('a' <= c && c <= 'z') c = c - 'a' + 'A';
else if ('A' <= c && c <= 'Z') c = c - 'A' + 'a';
// 或位運算:c ^= 32 (僅字母有效)

注意:非 ASCII 環境(EBCDIC 等)下位運算失效,標準庫函數可移植。

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