strlen.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /*
string.h [strlen]
書式: size_t strlen(const char *s)
機能: 文字列の長さを取得
引数: const char *s: 対象となる文字列
戻り値: 文字列の長さを返す.
*/
/*
文末の [\0] は含まない.
全角文字があると, 2 バイトとして扱う. もし, 全角文字と半角文字が混在した
文字数をカウントしたい場合には, mblen() か, mbstowcs() を使ったほうがよい.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s = "HelloWorld";
int len;
len = strlen(s);
printf("文字列の長さ: %d\n", len);
return 0;
}
|
strlen.c の実行結果は:
[cactus:~/code_c/refer]% ./strlen
文字列の長さ: 10
strcat.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /*
string.h [strcat]
書式: char* strcat(char *s1, const char *s2)
機能: 文字列のを連結
引数: char *s1: 連結先の文字列
const char *s2: 連結元の文字列
戻り値: 連結先の文字列を返す.
*/
/*
連結先の文字列 s1 には, 連結元の文字列 s2 の '\0' まで連結されるため,
s1 の文字数 + s2 の文字数 + 1 のサイズが必要になる.
sprintf() で連結するほうが簡単な場合もある.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char s1[11] = "Hello";
char *s2 = "World";
strcat(s1, s2);
printf("連結文字列: %s\n", s1);
return 0;
}
|
strcat.c の実行結果は:
[cactus:~/code_c/refer]% ./strcat
連結文字列: HelloWorld
strcmp.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /*
string.h [strcmp]
書式: int strcmp(const char *s1, const char *s2)
機能: 文字列の比較
引数: const char *s1: 比較する文字列
const char *s2: 比較する文字列
戻り値:
s1 < s2: 負の値
s1 = s2: 0
s1 > s2: 正の値
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "abc";
char *s2 = "abc";
char *s3 = "ABC";
int ret;
printf("%s と %s の比較\n", s1, s2);
ret = strcmp(s1, s2);
if(ret == 0)
printf("文字列が一致した\n");
else
printf("文字列が異なる\n");
printf("%s と %s の比較\n", s1, s3);
ret = strcmp(s1, s3);
if(ret == 0)
printf("文字列が一致した\n");
else
printf("文字列が異なる\n");
return 0;
}
|
strcmp.c の実行結果は:
[cactus:~/code_c/refer]% ./strcmp
abc と abc の比較
文字列が一致した
abc と ABC の比較
文字列が異なる
strcpy.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /*
string.h [strcpy]
書式: char* strcpy(char *dst, const char *src)
機能: 文字列のコピー
引数: char *dst: コピー先となる文字列
const char *src: コピー元となる文字列
戻り値: コピー先文字列のポインタを返す.
*/
/*
[\0] までがコピーされるため, 引数 dst には [コピー元文字数 + 1]
のサイズが必要.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char src[10] = "ABCDEFG";
char dst[10];
strcpy(dst, src);
printf("コピーされた文字列: %s\n", dst);
return 0;
}
|
strcpy.c の実行結果は:
[cactus:~/code_c/refer]% ./strcpy
コピーされた文字列: ABCDEFG
strncat.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /*
string.h [strncat]
書式: char* strncat(char *s1, const char *s2, size_t n)
機能: 文字列を指定した文字列の連結
引数: char *s1: 連結先の文字列
const char *s2: 連結元の文字列
size_t n: 連結する文字数
戻り値: 連結先の文字列のポインタを返す.
*/
/*
指定した文字数 (n) より, 連結元 (s2) の文字数が小さい場合は, [\0]
までが連結される.
指定した文字数 (n) より, 連結元 (s2) の文字数が大きい場合は, [\0]
が追加される.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char s1[100] = "ABCDE";
char *s2 = "123456789";
strncat(s1, s2, 6);
printf("連結文字列: %s\n", s1);
return 0;
}
|
strncat.c の実行結果は:
[cactus:~/code_c/refer]% ./strncat
連結文字列: ABCDE123456
strncmp.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /*
string.h [strncmp]
書式: int strncmp(const char *s1, const char *s2, size_t n)
機能: 文字列を指定した文字列の比較
引数: const char *s1: 比較する文字列
const char *s2: 比較する文字列
size_t n: 比較する先頭からの文字数
戻り値:
s1 < s2: 負の値
s1 = s2: 0
s1 > s2: 正の値
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "ABCD";
char *s2 = "ABC123";
int ret;
printf("%s と %s の 3 文字目までの比較\n", s1, s2);
ret = strncmp(s1, s2, 3);
if(ret == 0)
printf("文字列が一致した\n");
else
printf("文字列が異なる\n");
printf("%s と %s の 5 文字目までの比較\n", s1, s2);
ret = strncmp(s1, s2, 5);
if(ret == 0)
printf("文字列が一致した\n");
else
printf("文字列が異なる\n");
return 0;
}
|
strncmp.c の実行結果は:
[cactus:~/code_c/refer]% ./strncmp
ABCD と ABC123 の 3 文字目までの比較
文字列が一致した
ABCD と ABC123 の 5 文字目までの比較
文字列が異なる
strncpy.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /*
string.h [strncpy]
書式: char* strncpy(char *dst, const char *src, size_t n)
機能: 文字列を指定した文字列のコピー
引数: char *dst: コピー先となる文字列
const char *src: コピー元となる文字列
size_t: コピーする文字数
戻り値: コピー先文字列のポインタを返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char dst[100] = "ABCDEFG";
char *src = "12345";
strncpy(dst, src, 3);
printf("コピーされた文字列: %s\n", dst);
strncpy(dst, src, 5);
printf("コピーされた文字列: %s\n", dst);
strncpy(dst, src, 6);
printf("コピーされた文字列: %s\n", dst);
return 0;
}
/*
最初は, 3 文字のみコピーなので [ABCDEFG] という文字列に 3 文字のみ
上書きされる.
次は, 6 文字コピーのため, [\0] が追加されて上書きされているわけ.
*/
|
strncpy.c の実行結果は:
[cactus:~/code_c/refer]% ./strncpy
コピーされた文字列: 123DEFG
コピーされた文字列: 12345FG
コピーされた文字列: 12345
strchr.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /*
string.h [strchr]
書式: char* strchr(const char *s, int c)
機能: 文字列内の文字を検索
引数: const char *s: 検索元の文字列
int c: 検索する文字
戻り値: 検索文字を最初に発見した位置のポインタを返し,
発見出来なかったときは, NULL を返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s = "ABCDEFGHIJKLMN";
int c = 'L';
char *ret;
ret = strchr(s, c);
if(ret != NULL)
printf( "%c を index %d 番目に発見した\n", c, (int)(ret-s) );
else
printf("%c は発見できない\n", c);
return 0;
}
|
strchr.c の実行結果は:
[cactus:~/code_c/refer]% ./strchr
L を index 11 番目に発見した
strrchr.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /*
string.h [strchr]
書式: char* strrchr(const char *s, int c)
機能: 文字列内の文字を後ろから検索 ( <-- 後ろから検索する)
引数: const char *s: 検索元の文字列
int c: 検索する文字
戻り値: 検索文字を最初に発見した位置のポインタを返し,
発見出来なかったときは, NULL を返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s = "ABCDEFGABCDEFG";
int c = 'C';
char *ret;
ret = strrchr(s, c);
if(ret != NULL)
printf( "%c を index %d 番目に発見した\n", c, (int)(ret-s) );
else
printf("%c は発見できない\n", c);
return 0;
}
|
strrchr.c の実行結果は:
[cactus:~/code_c/refer]% ./strrchr
C を index 9 番目に発見した
strstr.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /*
string.h [strstr]
書式: char* strstr(const char *s1, const char *s2)
機能: 文字列内の文字列を検索
引数: const char *s1: 検索対象の文字列
const char *s2: 検索する文字列
戻り値: 検索文字列 (s2) を最初に発見した位置のポインタを返し,
発見出来なかったときは, NULL を返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "ABCD123ABCD123";
char *s2 = "123";
char *ret;
ret = strstr(s1, s2);
if(ret != NULL)
printf( "%s を index %d 番目に発見した\n", s2, (int)(ret-s1) );
else
printf("%s は発見できない\n", s2);
return 0;
}
|
strstr.c の実行結果は:
[cactus:~/code_c/refer]% ./strstr
123 を index 4 番目に発見した
strpbrk.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /*
string.h [strpbrk]
書式: char* strpbrk(const char *s1, const char *s2)
機能: 文字列内から文字群で検索
引数: const char *s1: 検索対象の文字列
const char *s2: 検索する文字群
戻り値: 検索文字群 (s2) のどれか 1 文字を最初に発見した位置のポインタ
を返し,
発見出来なかったときは, NULL を返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "ABCDEFGHIJKLMN";
char *s2 = "TEST";
char *ret;
ret = strpbrk(s1, s2);
if(ret != NULL)
printf( "%s の %c を index %d 番目に発見した\n", s2, *ret, (int)(ret-s1) );
else
printf("%s は発見できない\n", s2);
return 0;
}
|
strpbrk.c の実行結果は:
[cactus:~/code_c/refer]% ./strpbrk
TEST の E を index 4 番目に発見した
strspn.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /*
string.h [strspn]
書式: size_t strspn(const char *s1, const char *s2)
機能: 文字列内から文字群を含む先頭からの長さを取得
引数: const char *s1: 検索対象の文字列
const char *s2: 検索する文字群
戻り値: 文字群 (s2) が含まれた, 文字列 (s1) の先頭からの長さを返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "13242341ABCD";
char *s2 = "1234DCBA";
int len;
len = strspn(s1, s2);
printf("文字群を含む先頭部分の長さ: %d\n", len);
return 0;
}
|
strspn.c の実行結果は:
[cactus:~/code_c/refer]% ./strspn
文字群を含む先頭部分の長さ: 12
strcspn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /*
string.h [strcspn]
書式: size_t strcspn(const char *s1, const char *s2)
機能: 文字列内から文字群を含まない先頭からの長さを取得
引数: const char *s1: 検索対象の文字列
const char *s2: 検索する文字群
戻り値: 文字群 (s2) を含まない, 文字列 (s1) の先頭からの長さを返す.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char *s1 = "DACBBC2ABC";
char *s2 = "1234B";
int len;
len = strcspn(s1, s2);
printf("文字群を含まない先頭部分の長さ: %d\n", len);
return 0;
}
|
strcspn.c の実行結果は:
[cactus:~/code_c/refer]% ./strcspn
文字群を含まない先頭部分の長さ: 3
strtok.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /*
string.h [strtok]
書式: char* strtok(char *s1, const char *s2)
機能: 文字列を指定区切り文字群で分解
引数: char *s1: 分解する文字列
const char *s2: 区切り文字群
戻り値: 区切られた文字列 (トークン) があれば, 先頭ポインタを返し,
区切られた文字列 (トークン) がなければ, NULL を返す.
*/
/*
1 回目は, 分解する文字列 (s1) を指定し, トークンを取得する,
2 回目以降は, s1 に NULL を指定し, トークンを取得する,
NULL を返してきた場合に終了する.
分解する文字列がトークンに分解する際に, 区切り文字があった箇所は,
[\0] に置き換えられるので注意が必要.
*/
#include <stdio.h>
#include <string.h>
int main(void){
char s1[] = "this is a pen. Hello-World...";
char s2[] = " -."; /* 空白 + ハイフン + ピリオド */
char *tok;
tok = strtok(s1, s2);
while(tok != NULL){
printf("%s\n", tok);
tok = strtok(NULL, s2); /* 2 回目以降 */
}
return 0;
}
/*
空白, ハイフン, ピリオドが区切り文字のため, それらは取得されない.
区切り文字は順不同で複数の文字を指定することができる.
*/
|
strtok.c の実行結果は:
[cactus:~/code_c/refer]% ./strtok
this
is
a
pen
Hello
World