苦学楽学塾 ホームページ
最終更新日:2024年10月11日
C言語では、JavaScript,Pythonとは違って、2つの文字列string1,string2があるとき、string1 = string2; としても、string2の内容はstring1に入りません。string2のアドレスがstring1に入るだけです。if (string1 == string2)としても、string1とstring2の文字列としての比較は行われず、アドレスが比較されるだけです。C言語では関数を使って、文字列としての代入操作(strcpy()関数)も、比較操作(strcmp()関数)も行います。
C言語の文字列関数を以下に掲げます。
double atof(char *string)
文字列stringの数値にできる文字である範囲をdouble型に変換します。<sydlib.h>をincludeしてください。
int atoi(char *string)
文字列stringの数値にできる文字である範囲をint型に変換します。<sydlib.h>をincludeしてください。
long atol(char *string)
文字列stringの数値にできる文字である範囲をlong型に変換します。<sydlib.h>をincludeしてください。
int isalnum(int c)
文字cが英字または数字の場合に0以外、英字でも数字でもない場合0を返します。<ctype.h>をincludeしてください。
int isalpha(int c)
文字cが英字の場合に0以外、英字でない場合0を返します。<ctype.h>をincludeしてください。
int isascii(int c)
文字cのコードが16進で00から7fの場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isblank(int c)
文字cが空白(16進で文字コード20)の場合に0以外、空白でない場合0を返します。<ctype.h>をincludeしてください。
int iscntrl(int c)
文字cのコードが16進で00から1f,または7fの場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isdigit(int c)
文字cが'0'~'9'の場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isgraph(int c)
文字cのコードが16進で21から7eの場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int islower(int c)
文字cが小文字のアルファベット'a'~'z'の場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isprint(int c)
文字cのコードが16進で20から7eの場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int ispunct(int c)
文字cが区切り文字(文字コードが16進で21~2f,3a~40,5b~60,7b~7e)の場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isspace(int c)
文字cが空白文字(文字コードが16進で09~0d,20)の場合0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isupper(int c)
文字cが大文字のアルファベット'A'~'Z'の場合に0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int isxdigit(int c)
文字cが16進数表示文字(文字コードが16進で30~39,41~46,61~66)の場合0以外、それ以外の場合0を返します。<ctype.h>をincludeしてください。
int mblen(char *string, size_t n)
LOCALEのLC_CTYPEが、ja_JP.SJIS(CYGWINのlocaleコマンドで確認できます)になっていれば、shift-JISのように1バイトの半角文字,2バイトの全角文字が混在する文字列のバイト単位の長さを返します。nは最大文字数です。<stdlib.h>をincludeしてください。
void *memchr(void *buffer, int c, size_t count)
bufferからcountバイトの範囲で、1バイトのデータc が出てくれば、そのアドレスを返します。データcが出てこなければ、NULLを返します。bufferの指す先は文字である必要はありません。int型でも、float型でも、構造体でもOKです。<string.h>をincludeしてください。
int memcmp(void *buf1, void *buf2, size_t count)
buf1とbuf2の先頭からcountバイトの範囲で比較します。buf1 = buf2なら0を、buf1 > buf2なら正数を、buf1 < buf2なら負数を返します。buf1,buf2の指す先は文字である必要はありません。int型でも、float型でも、構造体でもOKです。<string.h>をincludeしてください。
void *memcpy(void *buf1, void *buf2, size_t count)
buf2からbuf1へcountバイトをコピーします。buf1以降とbuf2以降で重なりがある場合の動作は保証されません。buf1を返します。bufferの指す先は文字である必要はありません。int型でも、float型でも、構造体でもOKです。<string.h>をincludeしてください。
void *memmove(void *buf1, void *buf2, size_t count)
buf2からbuf1へcountバイトをコピーします。buf1以降とbuf2以降で重なりがある場合も動作は保証されます。buf1を返します。bufferの指す先は文字である必要はありません。int型でも、float型でも、構造体でもOKです。<string.h>をincludeしてください。
void *memset(void *buffer, int c, size_t count)
bufferからcountバイトを1バイトのデータcで埋めます。bufferを返します。bufferの指す先は文字である必要はありません。int型でも、float型でも、構造体でもOKです。<string.h>をincludeしてください。
int strcasecmp(char *str1, char *str2)
文字列str1と文字列str2を大文字小文字の違いを無視して比較します。一致すれば0,str1の文字コードがstr2の文字コードより大きければ正数,小さければ負数を返します。<string.h>をincludeしてください。
char *strcat(char *str1, char *str2)
文字列str1の後ろに文字列str2を連結します。即ち、str2の先頭文字がstr1末尾の0に重なるように文字がコピーされます。両者に重なりがある場合の動作は保証されません。str1には充分な大きさの領域が必要です。str1を返します。<string.h>をincludeしてください。
char *strchr(char *string, int c)
文字列string中で最初に文字cが出てくるアドレスを返します。文字列string中に文字cが出てこないときはNULLを返します。<string.h>をincludeしてください。
int strcmp(char *str1, char *str2)
文字列str1と文字列str2を比較します。一致すれば0,str1の文字コードがstr2の文字コードより大きければ正数,小さければ負数を返します。<string.h>をincludeしてください。
char *strcpy(char *str1, char *str2)
文字列str2の内容をstr1以降にコピーし、str1を返します。str1には充分な領域が必要です。str1以降とstr2以降に重なりがある場合の動作は保証されません。<string.h>をincludeしてください。
size_t strcspn(char *string, char *target)
文字列stringの中で、文字列target中に存在する文字を探索し、最初に見つかる位置までの文字数を返します。string = "abcdefg"; target = "egh"; であれば、最初に'e'が見つかるまで"abcd"の4文字あるので、4を返します。<string.h>をincludeしてください。
char *strerror(int errno)
エラー番号errnoに対応するエラー・メッセージを指すポインタを返します。errnoは、<errno.h>を、strerrorは、<string.h>をincludeしてください。
size_t strlen(char *string)
文字列stringの長さ(末尾の0は含めない)を返します。<string.h>をincludeしてください。
int strncasecmp(char *str1, char *str2, size_t count)
文字列str1,文字列str2の最初のcount文字を大文字小文字の違いを無視して比較します。一致すれば0,str1の文字コードがstr2の文字コードより大きければ正数,小さければ負数を返します。<string.h>をincludeしてください。
char *strncat(char *str1, char *str2, size_t count)
文字列str1の後ろに文字列str2のはじめから最大count文字を連結します。即ち、str2の先頭文字がstr1末尾の0に重なるように文字がコピーされます。両者に重なりがある場合の動作は保証されません。str1には充分な大きさの領域が必要です。str1を返します。<string.h>をincludeしてください。
int strncmp(char *str1, char *str2, size_t count)
文字列str1と文字列str2を最初からcount文字の範囲で比較します。一致すれば0,str1の文字コードがstr2の文字コードより大きければ正数,小さければ負数を返します。<string.h>をincludeしてください。
char *strncpy(char *str1, char *str2, size_t count)
文字列str2の最初からcount文字をstr1以降にコピーし、str1を返します。str1には充分な領域が必要です。str1以降とstr2以降に重なりがある場合の動作は保証されません。<string.h>をincludeしてください。
char *strpbrk(char *string, char *target)
文字列stringの中で、文字列target中に存在する文字を探索し、最初に見つかる位置を返します。string = "abcdefg"; target = "egh"; であれば、最初に'e'が見つかる位置、string + 4を返します。<string.h>をincludeしてください。
char *strrchr(char *string, int c)
文字列string中で最後に文字cが出てくるアドレスを返します。文字列string中に文字cが出てこないときはNULLを返します。<string.h>をincludeしてください。
size_t strspn(char *str1, char *str2)
文字列stringの先頭から、文字列target中の文字でできている部分の最大の長さを返します。string = "abcdefg"; target = "abh"; であれば、最初に'c'が見つかるまで"ab"の2文字あるので、2を返します。<string.h>をincludeしてください。
char *strstr(char *str1, char *str2)
文字列str1の先頭から、文字列str2が出現する最初の位置を指すポインタを返します。str2が存在しない場合、NULLを返します。<string.h>をincludeしてください。
double strtod(char *string, char **ep)
文字列stringの最初から数値変換できない文字が出てくるまでの数字の文字列について、double型に変換して返します。数値変換できない文字が出てくる位置を指すポインタをepの指すポインタ変数に返します(epは文字型を指すポインタを指すポインタなので、char **epとなります)。<stdlib.h>をincludeしてください。
float strtof(char *string, char **ep)
文字列stringの最初から数値変換できない文字が出てくるまでの数字の文字列について、float型に変換して返します。数値変換できない文字が出てくる位置を指すポインタをepの指すポインタ変数に返します(epは文字型を指すポインタを指すポインタなので、char **epとなります)。<stdlib.h>をincludeしてください。
char *strtok(char *string, char *delimiter)
文字列stringを文字列delimiterの中に存在する文字で分割します。stringの中に複数個存在する場合、2回目以降は、stringをNULLとして、strtok()を呼び出すと、前回の終了位置の次から文字列delimiterの中の文字を探索します。文字列delimiterの中に存在する文字により切り出された最初の文字列の先頭アドレスを返します。探索する文字列がなくなるとNULLを返します。<string.h>をincludeしてください。
delimiter = " ,."(空白とカンマとピリオド)のとき、strtok()を以下のようにして使います。
char *string, *delimiter;
char *pc1;
char *token[100];
int token_count = 0;
char strx[] = "abc,defg hij.klmn";
と定義されていたとして、
string = (char *)malloc(100);
strcpy(string, strx);
delimiter = " ,.";
while(pc1 = strtok(string, delimiter)) {
token[token_count++] = pc1;
if (token_count > 99) break;
string = NULL;
}
free(string);
終了すると、token[0]が"abc",token[1]が"defg",token[2]が"hij",token[3]が"klmn"となり、token_countは4になっています。上記で、stringをmalloc()関数を使って領域確保していることに注意してください。strtok()関数の中で、stringの指す領域内に、切り分けられた文字列末尾の0を書き込めるようにしておく必要があります。
long strtol(char *string, char **ep, int base)
文字列stringの最初から数値変換できない文字が出てくるまでの数字の文字列について、long型に変換して返します。数値変換できない文字が出てくる位置を指すポインタをepの指すポインタ変数に返します(epは文字型を指すポインタを指すポインタなので、char **epとなります)。<stdlib.h>をincludeしてください。
int tolower(int c)
英大文字cを小文字に変換して返します。変換できない場合はcを返します。<ctype.h>をincludeしてください。
int toupper(int c)
英小文字cを大文字に変換して返します。変換できない場合はcを返します。<ctype.h>をincludeしてください。
【広告】 ここから広告です。ご覧の皆さまのご支援ご理解を賜りたく、よろしくお願いいたします。
【広告】 広告はここまでです。