さまざまな文字列操作

明解C言語 入門編 > 11. 文字列とポインタ >

さまざまな文字列操作

C


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

int main(int argc, char* argv[])
{
/* strcat */
char st1[100] = "1234567890";
char st2[100] = "ABCDE";

printf("%s + ", st1);
printf("%s = ", st2);
strcat(st1, st2);
printf("%s\n", st1);

char st3[100] = "1234567890";
printf("%s + ", st3);
printf("%s = ", st2);
strncat(st3, st2, 4);
printf("%s\n", st3);

char st4[100] = "1234567890";
printf("%s + ", st4);
printf("%s = ", st2);
strncat(st4, st2, 6);
printf("%s\n", st4);
puts("");

/* strrev */
printf("%s\n", st4);
printf("%s\n", strrev(st4));
puts("");

/* strcmp */
char* pt1 = "123";
char* pt2 = "123";

int i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

pt2 = "122";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

pt2 = "124";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

pt2 = "999";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

pt2 = "12";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

pt2 = "1234";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

puts("");

/* stricmp */
pt1 = "ABCD";
pt2 = "abcd";
i = strcmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

i = stricmp(pt1, pt2);
if (i == 0)
printf("%s = %s (%d)\n", pt1, pt2, i);
else if (i > 0)
printf("%s > %s (%d)\n", pt1, pt2, i);
else
printf("%s < %s (%d)\n", pt1, pt2, i);

puts("");

/* strstr */
pt1 = "1234567890";
pt2 = "45";
char* pt3 = strstr(pt1, pt2);
printf("strstr(\"%s\", \"%s\") = %u\n", pt1, pt2, pt3 - pt1);

pt2 = "12";
pt3 = strstr(pt1, pt2);
printf("strstr(\"%s\", \"%s\") = %u\n", pt1, pt2, pt3 - pt1);

pt2 = "123456780";
pt3 = strstr(pt1, pt2);
if (pt3 != '\0')
printf("strstr(\"%s\", \"%s\") = %u\n", pt1, pt2, pt3 - pt1);
else
printf("strstr(\"%s\", \"%s\") = NULL\n", pt1, pt2);

puts("");

/* strchr */
pt1 = "1294567890";
char c = '9';
pt3 = strchr(pt1, c);
printf("strchr(\"%s\", \"%c\") = %u\n", pt1, c, pt3 - pt1);

c = 'A';
pt3 = strchr(pt1, c);
if (pt3 != '\0')
printf("strchr(\"%s\", \"%c\") = %u\n", pt1, c, pt3 - pt1);
else
printf("strchr(\"%s\", \"%c\") = NULL\n", pt1, c);

puts("");

/* strrchr */
c = '9';
pt3 = strrchr(pt1, c);
printf("strrchr(\"%s\", \"%c\") = %u\n", pt1, c, pt3 - pt1);

c = 'A';
pt3 = strrchr(pt1, c);
if (pt3 != '\0')
printf("strrchr(\"%s\", \"%c\") = %u\n", pt1, c, pt3 - pt1);
else
printf("strrchr(\"%s\", \"%c\") = NULL\n", pt1, c);

puts("");
pt1 = "1234567890";

/* strpbrk */
pt2 = "ABCD8";
pt3 = strpbrk(pt1, pt2);
if (pt3 != '\0')
printf("strpbrk(\"%s\", \"%s\") = %u\n", pt1, pt2, pt3 - pt1);
else
printf("strpbrk(\"%s\", \"%s\") = NULL\n", pt1, pt2);

pt2 = "ABCDE";
pt3 = strpbrk(pt1, pt2);
if (pt3 != '\0')
printf("strpbrk(\"%s\", \"%s\") = %u\n", pt1, pt2, pt3 - pt1);
else
printf("strpbrk(\"%s\", \"%s\") = NULL\n", pt1, pt2);

puts("");

/* strcspn */
pt2 = "0";
i = strcspn(pt1, pt2);
printf("strcspn(\"%s\", \"%s\") = %u\n", pt1, pt2, i);

pt2 = "A";
i = strcspn(pt1, pt2);
printf("strcspn(\"%s\", \"%s\") = %u\n", pt1, pt2, i);

puts("");

/* strtok */
pt1 = "a\\bcd\\efg";
pt2 = "\\";
printf("pt1 = %s\n", pt1);

pt3 = strtok(pt1, pt2);
printf("pt1 = %s, pt3 = %s\n", pt1, pt3);

pt3 = strtok('\0', pt2);
printf("pt1 = %s, pt3 = %s\n", pt1, pt3);

pt3 = strtok('\0', pt2);
printf("pt1 = %s, pt3 = %s\n", pt1, pt3);

return 0;
}

実行結果

T:\>lesson087\project1.exe
1234567890 + ABCDE = 1234567890ABCDE
1234567890 + ABCDE = 1234567890ABCD
1234567890 + ABCDE = 1234567890ABCDE

1234567890ABCDE
EDCBA0987654321

123 = 123 (0)
123 > 122 (1)
123 < 124 (-1)
123 < 999 (-8)
123 > 12 (51)
123 < 1234 (-52)

ABCD < abcd (-32)
ABCD = abcd (0)

strstr("1234567890", "45") = 3
strstr("1234567890", "12") = 0
strstr("1234567890", "123456780") = NULL

strchr("1294567890", "9") = 2
strchr("1294567890", "A") = NULL

strrchr("1294567890", "9") = 8
strrchr("1294567890", "A") = NULL

strpbrk("1234567890", "ABCD8") = 7
strpbrk("1234567890", "ABCDE") = NULL

strcspn("1234567890", "0") = 9
strcspn("1234567890", "A") = 10

pt1 = a\bcd\efg
pt1 = a, pt3 = a
pt1 = a, pt3 = bcd
pt1 = a, pt3 = efg