0Pricing
C Academy · レッスン

文字ユーティリティの作成

実践的な例を扱います。

「文字ユーティリティの作成」はCoddyKit上の無料C Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全4レッスンが含まれています。

学んだことを組み合わせる

ここまで学んだ char の算術演算、ctype ライブラリ、文字列のループを組み合わせると、実用的な小さな文字処理ユーティリティを作成できます。

ここでは、よく使われるヘルパーをいくつか作ってみましょう。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char c = 'g';
    printf("Upper: %c\n", toupper(c));
    return 0;
}

母音を数える

母音カウンターでは、各文字が大文字・小文字を問わず a、e、i、o、u のいずれかに該当するかを調べます。

#include <stdio.h>
#include <ctype.h>

int count_vowels(const char *s) {
    int n = 0;
    for (int i = 0; s[i]; i++) {
        char c = tolower(s[i]);
        if (c=='a'||c=='e'||c=='i'||c=='o'||c=='u') n++;
    }
    return n;
}

int main(void) {
    printf("%d\n", count_vowels("Education"));
    return 0;
}

文字列を反転する

文字列をその場で反転するには、両端の文字を内側へ向かいながら入れ替えます。

#include <stdio.h>
#include <string.h>

int main(void) {
    char s[] = "hello";
    int n = strlen(s);
    for (int i = 0; i < n / 2; i++) {
        char tmp = s[i];
        s[i] = s[n-1-i];
        s[n-1-i] = tmp;
    }
    printf("%s\n", s);
    return 0;
}

回文を確認する

回文は、前から読んでも後ろから読んでも同じになります。左右対称の位置にある文字を、中央で出会うまで比較します。

#include <stdio.h>
#include <string.h>

int is_palindrome(const char *s) {
    int i = 0, j = strlen(s) - 1;
    while (i < j) {
        if (s[i] != s[j]) return 0;
        i++; j--;
    }
    return 1;
}

int main(void) {
    printf("%d\n", is_palindrome("level"));
    printf("%d\n", is_palindrome("world"));
    return 0;
}

大文字と小文字を切り替える

大文字・小文字の切り替え処理では、大文字を小文字に、小文字を大文字に変換し、文字以外はそのままにします。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char s[] = "Hello World";
    for (int i = 0; s[i]; i++) {
        if (isupper(s[i])) s[i] = tolower(s[i]);
        else if (islower(s[i])) s[i] = toupper(s[i]);
    }
    printf("%s\n", s);
    return 0;
}

数字以外を取り除く

文字列から数字文字だけを残します。電話番号のクリーニングなどに役立ちます。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char *s = "(555) 123-4567";
    for (int i = 0; s[i]; i++) {
        if (isdigit((unsigned char)s[i])) putchar(s[i]);
    }
    putchar('\n');
    return 0;
}

atoi を手動で実装する

各桁を順に累積して、数値文字列を整数に変換します。累積中の合計を 10 倍し、そこへ数字の値を加えます。

#include <stdio.h>
#include <ctype.h>

int my_atoi(const char *s) {
    int n = 0;
    for (int i = 0; isdigit((unsigned char)s[i]); i++) {
        n = n * 10 + (s[i] - '0');
    }
    return n;
}

int main(void) {
    printf("%d\n", my_atoi("427") + 3);
    return 0;
}

単語数を数える

空白文字から空白以外の文字への切り替わりを検出することで、単語数を数えます。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char *s = "the quick brown fox";
    int words = 0, in_word = 0;
    for (int i = 0; s[i]; i++) {
        if (isspace((unsigned char)s[i])) in_word = 0;
        else if (!in_word) { in_word = 1; words++; }
    }
    printf("words = %d\n", words);
    return 0;
}

単語の先頭を大文字にする

文字列の先頭、または空白文字の直後にある文字を大文字に変換し、各単語の先頭を大文字にします。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char s[] = "hello there friend";
    int start = 1;
    for (int i = 0; s[i]; i++) {
        if (isspace((unsigned char)s[i])) start = 1;
        else { if (start) s[i] = toupper(s[i]); start = 0; }
    }
    printf("%s\n", s);
    return 0;
}

ROT13 暗号

ROT13 は各文字をアルファベット上で 13 文字分シフトし、末尾に達したら先頭に戻ります。2 回適用すると元の文字列に戻ります。

#include <stdio.h>
#include <ctype.h>

int main(void) {
    char s[] = "Hello";
    for (int i = 0; s[i]; i++) {
        char c = s[i];
        if (isupper(c)) s[i] = 'A' + (c - 'A' + 13) % 26;
        else if (islower(c)) s[i] = 'a' + (c - 'a' + 13) % 26;
    }
    printf("%s\n", s);
    return 0;
}

文字の出現頻度

単純なループと比較を使って、特定の文字が文字列内に何回現れるかを数えます。

#include <stdio.h>

int main(void) {
    char *s = "mississippi";
    char target = 's';
    int count = 0;
    for (int i = 0; s[i]; i++) {
        if (s[i] == target) count++;
    }
    printf("'%c' appears %d times\n", target, count);
    return 0;
}

確認問題

文字処理ユーティリティのスキルを確認しましょう。

まとめ

実用的な文字処理ユーティリティを作成しました。

  • 母音、単語、文字の出現頻度を数える。
  • 文字列を反転し、回文かどうかを確認する。
  • 大文字・小文字を切り替え、単語の先頭を大文字にする。
  • atoi の手動実装と ROT13 暗号を実装する。

よくある質問

「文字ユーティリティの作成」レッスンは無料ですか?

はい。「文字ユーティリティの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全4レッスンが含まれています。

「文字ユーティリティの作成」で何を学びますか?

実践的な例を扱います。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「文字ユーティリティの作成」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC Academyレッスンでコードを書いて実行できますか?

はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 整数としての文字
  2. ctype ライブラリ
  3. 文字の読み取り
  4. 文字ユーティリティの作成
← C Academyに戻る