📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 255行目: | 255行目: | ||
</source> | </source> | ||
<br><br> | <br><br> | ||
== 文字列の末尾にある空白を削除する == | |||
C言語には、文字列の末尾にある空白を削除する関数やマクロは存在しないので、各自でこの機能を実装する必要がある。<br> | |||
実装は以下の手順で行うことが出来る。<br> | |||
# 文字列の末尾の位置を探す | |||
# 手順1で探した末尾から順に、空白でない位置を探す | |||
# 手順2で探した位置 + 1 に終端の'\0'を付加する | |||
<source lang="c"> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
int TrimEnd(char *s); | |||
int main(void) | |||
{ | |||
int ret; | |||
char snoopy[] = "SNOOPY "; | |||
ret = TrimEnd(snoopy); | |||
printf("変換後: \"%s\"\n", snoopy); | |||
printf("削除した空白: %d文字\n", ret); | |||
return EXIT_SUCCESS; | |||
} | |||
/* 文字列の末尾にある空白を削除する */ | |||
/* @param[in] s 対象文字列 */ | |||
/* @return 削除した空白の数を返す */ | |||
int TrimEnd(char *s) | |||
{ | |||
int i; | |||
int count = 0; | |||
/* 空ポインタか? */ | |||
if ( s == NULL ) | |||
{ | |||
return -1; | |||
} | |||
/* 文字列長を取得する */ | |||
i = strlen(s); | |||
/* 末尾から順に空白でない位置を探す */ | |||
while ( --i >= 0 && s[i] == ' ' ) count++; | |||
/* 終端ナル文字を付加する */ | |||
s[i + 1] = '\0'; | |||
return count; | |||
} | |||
</source> | |||
<br><br> | |||
== 文字列の長さを取得する == | |||
C言語で文字列の長さを取得するには、string.hのstrlen関数を使用する。<br> | |||
strlen関数は、第1引数が指す文字列の長さを取得する関数である。なお、文字列の長さに終端'\0'は含まない。<br> | |||
<source lang="c"> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
int main(void) | |||
{ | |||
char s[] = "スヌーピー!"; | |||
int length; | |||
length = (int)strlen(s); | |||
printf("%sの長さ: %d\n", s, length); | |||
return EXIT_SUCCESS; | |||
} | |||
</source> | |||
<br><br> | |||
== 文字列を比較する == | |||
C言語で文字列を比較するには、string.hのstrcmp関数またはstrncmp関数を使用する。<br> | |||
<br> | |||
strcmp関数は、第1引数が指す文字列と第2引数が指す文字列を比較する関数である。文字列を最初から最後まで比較したいときに使用する。<br> | |||
strncmp関数は、第1引数が指す文字列の始めの第3引数の文字数分と、第2引数が指す文字列の始めの第3引数の文字数分を比較する関数である。<br> | |||
(文字列の終端'\0'に続く文字の比較は行わない)<br> | |||
主に文字列の一部を比較したいときに使用する。<br> | |||
<br> | |||
strcmp関数とstrncmp関数は、比較する文字列が同じなら0、第1引数 > 第2引数なら正の整数、第1引数 < 第2引数なら負の整数を返す。<br> | |||
<source lang="c"> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
int main(void) | |||
{ | |||
char s1[] = "Hoge01"; | |||
char s2[] = "Hoge02"; | |||
puts("全文字比較"); | |||
if ( strcmp(s1, s2) == 0 ) | |||
{ | |||
printf("%sと%sは同じ文字列です.\n", s1, s2); | |||
} | |||
else | |||
{ | |||
printf("%sと%sは異なる文字列です.\n", s1, s2); | |||
} | |||
puts("先頭の4文字分比較"); | |||
if ( strncmp(s1, s2, 4) == 0 ) | |||
{ | |||
printf("%sと%sは同じ文字列です.\n", s1, s2); | |||
} | |||
else | |||
{ | |||
printf("%sと%sは異なる文字列です.\n", s1, s2); | |||
} | |||
return EXIT_SUCCESS; | |||
} | |||
</source> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C]] | [[カテゴリ:C]] | ||