日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
例 3-1 は文字分類関数の使い方を示しています。
例 3-1 文字分類関数 |
---|
/* CHAP_3_CHARCLASS.C */ /* This example uses the isalpha, isdigit, and isspace */ /* functions to count the number of occurrences of letters, */ /* digits, and white-space characters entered through the */ /* standard input (stdin). */ #include <ctype.h> #include <stdio.h> #include <stdlib.h> main() { char c; int i = 0, j = 0, k = 0; while ((c = getchar()) != EOF) { if (isalpha(c)) i++; if (isdigit(c)) j++; if (isspace(c)) k++; } printf("Number of letters: %d\n", i); printf("Number of digits: %d\n", j); printf("Number of spaces: %d\n", k); } |
次の例は, 例 3-1 へのサンプル入力とサンプル出力を示しています。
$ RUN EXAMPLE1 I saw 35 people riding bicycles on Main Street.[Return] [Ctrl/Z] Number of letters: 36 Number of digits: 2 Number of spaces: 8 $ |
文字変換関数は,ある種類の文字を別の種類に変換します。次の関数があります。
ecvt _tolower fcvt toupper gcvt _toupper mbtowc towctrans mbrtowc wctrans mbsrtowcs wcrtomb toascii wcsrtombs tolower |
これらの各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。
例 3-2 は, ecvt関数の使い方を示しています。
例 3-2 倍精度値から ASCII 文字列への変換 |
---|
/* CHAP_3_CHARCONV.C */ /* This program uses the ecvt function to convert a double */ /* value to a string. The program then prints the string. */ #include <stdio.h> #include <stdlib.h> #include <unixlib.h> #include <string.h> main() { double val; /* Value to be converted */ int sign, /* Variables for sign */ point; /* and decimal place */ /* Array for the converted string */ static char string[20]; val = -3.1297830e-10; printf("original value: %e\n", val); if (sign) printf("value is negative\n"); else printf("value is positive\n"); printf("decimal point at %d\n", point); } |
例 3-2 からの出力は次のようになります。
$ RUN EXAMPLE2 original value: -3.129783e-10 converted string: 31298 value is negative decimal point at -9 $ |
例 3-3 は toupper関数と tolower関数の使い方を示しています。
例 3-3 大文字と小文字の変更 |
---|
/* CHAP_3_CONV_UPPERLOWER.C */ /* This program uses the functions toupper and tolower to */ /* convert uppercase to lowercase and lowercase to uppercase */ /* using input from the standard input (stdin). */ #include <ctype.h> #include <stdio.h> /* To use EOF identifier */ #include <stdlib.h> main() { char c, ch; while ((c = getchar()) != EOF) { if (c >= 'A' && c <= 'Z') ch = tolower(c); else ch = toupper(c); putchar(ch); } } |
次の例は 例 3-3 へのサンプル入力とサンプル出力を示しています。
$ RUN EXAMPLE3 LET'S GO TO THE welcome INN.[Ctrl/Z] let's go to the WELCOME inn. $ |
HP C RTL には,文字列を操作する関数グループがあります。これらの関数には,文字列を連結する関数,文字列から特定の文字を検索する関数, 2 つの文字列が等しいかどうか判断する関数など,その他の比較を実行する関数があります。
HP C RTL には,バイナリ・データが格納されているバッファをコピーするための関数も用意されています。
<varargs.h>および
<stdarg.h>ヘッダ・ファイルに定義および宣言されている関数は,可変長引数リストにアクセスするために使用できます。
<stdarg.h>関数は ANSI C 標準で定義されており,
<varargs.h>に定義されている関数より高い移植性を備えています。
たとえば
printfや
execlなどの RTL 関数では,可変長引数リストを使用します。可変長引数リストを使用するユーザ定義関数で
<varargs.h>や
<stdarg.h>を使用しない場合は,マシン間で引数の受け渡し規則が異なるため,移植することができません。
<stdarg.h>ヘッダ・ファイルには, va_alist および
va_dclが含まれていません。次の構文の例は,
<stdarg.h>を使用する場合の構文を示しています。
3.3 文字列および引数リスト関数
function_name(int arg1, ...) { va_list ap; . . . |
<varargs.h>を使用する場合は,次のようになります。
これらの名前および宣言の構文は次のとおりです。
function_name(int arg1, ...) { va_list ap; . . . |
例 3-4 は, strcat関数と strncat関数の使い方を示しています。
例 3-4 2 つの文字列の結合 |
---|
/* CHAP_3_CONCAT.C */ /* This example uses strcat and strncat to concatenate two */ /* strings. */ #include <stdio.h> #include <string.h> main() { static char string1[80] = "Concatenates "; static char string2[] = "two strings "; static char string3[] = "up to a maximum of characters."; static char string4[] = "imum number of characters"; printf("strcat:\t%s\n", strcat(string1, string2)); printf("strncat ( 0):\t%s\n", strncat(string1, string3, 0)); printf("strncat (11):\t%s\n", strncat(string1, string3, 11)); printf("strncat (40):\t%s\n", strncat(string1, string4, 40)); } |
例 3-4 は次の出力を生成します。
$ RUN EXAMPLE1 strcat: Concatenates two strings strncat ( 0): Concatenates two strings strncat (11): Concatenates two strings up to a max strncat (40): Concatenates two strings up to a maximum number of characters. $ |
例 3-5 は strcspn関数の使い方を示しています。
例 3-5 strcspn 関数に対する 4 つの引数 |
---|
/* CHAP_3_STRCSPN.C */ /* This example shows how strcspn interprets four */ /* different kinds of arguments. */ #include <stdio.h> main() { printf("strcspn with null charset: %d\n", strcspn("abcdef", "")); printf("strcspn with null string: %d\n", strcspn("", "abcdef")); printf("strcspn(\"xabc\", \"abc\"): %d\n", strcspn("xabc", "abc")); printf("strcspn(\"abc\", \"def\"): %d\n", strcspn("abc", "def")); } |
例 3-5 を呼び出すと, strcspn.outファイルに次のサンプル出力が生成されます。
$ RUN EXAMPLE2 strcspn with null charset: 6 strcspn with null string: 0 strcspn("xabc","abc"): 1 strcspn("abc","def"): 3 |
例 3-6 は, <stdarg.h>関数および定義の使い方を示しています。
例 3-6 <stdarg.h > 関数と定義の使用 |
---|
/* CHAP_3_STDARG.C */ /* This routine accepts a variable number of string arguments, */ /* preceded by a count of the number of such strings. It */ /* allocates enough space in which to concatenate all of the */ /* strings, concatenates them together, and returns the address */ /* of the new string. It returns NULL if there are no string */ /* arguments, or if they are all null strings. */ #include <stdarg.h> /* Include appropriate header files */ #include <stdlib.h> /* for the "example" call in main. */ #include <string.h> #include <stdio.h> /* NSTRINGS is the maximum number of string arguments accepted */ /* (arbitrary). */ #define NSTRINGS 10 char *concatenate(int n,...) { va_list ap; /* Declare the argument pointer. */ char *list[NSTRINGS], *string; int index = 0, size = 0; /* Check that the number of arguments is within range. */ if (n <= 0) return NULL; if (n > NSTRINGS) n = NSTRINGS; va_start(ap, n); /* Initialize the argument pointer. */ do { /* Extract the next argument and save it. */ list[index] = va_arg(ap, char *); size += strlen(list[index]); } while (++index < n); va_end(ap); /* Terminate use of ap. */ if (size == 0) return NULL; string = malloc(size + 1); string[0] = '\0'; /* Append each argument to the end of the growing result */ /* string. */ for (index = 0; index < n; ++index) strcat(string, list[index]); return string; } /* An example of calling this routine is */ main() { char *ret_string ; ret_string = concatenate(7, "This ", "message ", "is ", "built with ", "a", " variable arg", " list.") ; puts(ret_string) ; } |
例 3-6 を呼び出すと,次の出力が生成されます。
This message is built with a variable arg list. |
目次 | 索引 |
|