文字ユーティリティの作成
実践的な例を扱います。
「文字ユーティリティの作成」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 整数としての文字
- ctype ライブラリ
- 文字の読み取り
- 文字ユーティリティの作成