第12回資料

C言語応用
文字列その2
文字列の操作
 文字列の複写
配列 s に中身を”ABCD”にしたければ、
s[0] = ’A’; s[1] = ’B’; s[2] = ’C’;
s[3] = ’D’; s[4] = ’\0’;
といった具合に、配列の要素に1つ1つ値を代
入することで可能である。
http://www.center.nitech.ac.jp/~sfukui/ouyou/list12-1.c
文字列の操作
 標準ライブラリ strcpy
strcpy
ヘッダ
形式
解説
戻り値
#include<string.h>
char *strcpy(char *s1, const char *s2);
s1 の指す領域に、s2の指す文字列を’\0’を含めて複写する。
s1の値を返す。
文字列の操作
 文字列の連結
char *strconcat(char s[] , const char t[])
{
int i,j;
for(i = 0;s[i] != ’\0’;i++);
for(j = 0;(s[i++] = t[j++]) != ’\0’; );
return(s);
}
http://www.center.nitech.ac.jp/~sfukui/ouyou/list12-2.c
文字列の操作
 標準ライブラリ strcat
strcat
ヘッダ
形式
解説
戻り値
#include<string.h>
char *strcat(char *s1, const char *s2);
s1 の指す文字列の末尾に、s2の指す文字列を連結する。
s1の値を返す。
文字列の操作
 標準ライブラリ atoi
atoi
ヘッダ
形式
解説
#include<stdlib.h>
int atoi(const char *str);
戻り値
変換された整数値。変換が失敗したときの戻り値は定義
されない。
str の指す文字列を整数に変換する。
文字列とポインタ
 ポインタと文字列
char str1[] = ”ABC”;
char *str2 = ”ABC”;
どちらでもよい。
配列
str1[0]
str1[1]
str1[2]
str1[3]
ポインタ
’A’
str2
”ABC” (100) 番地
’A’
str2[0]
’B’
str2[1]
’C’
str2[2]
’\0’
str2[3]
’B’
’C’
’\0’
100
http://www.center.nitech.ac.jp/~sfukui/ouyou/list12-3.c
文字列とポインタ
 文字列の複写
char *strcopy(char *s , const char *t)
{
char *p = s;
while ((*s = *t) != ’\0’){
s++;
t++;
}
return(p);
}
http://www.center.nitech.ac.jp/~sfukui/ouyou/list12-4.c
文字列の配列
 2元配列による実現
s[0][0]
”NA”,”DOHC”の2つの文
字列の配列を、「配列文字
列」の配列として実現する。
配列を要素とする配列は、
2元配列である。
s[0][1]
s[0]
s[0][2]
s[0][3]
s[0][4]
s[1][0]
s[1][1]
s[1]
s[1][2]
s[1][3]
s[1][4]
’N’
’A’
’\0’
’\0’
’\0’
’D’
’O’
’H’
’C’
’\0’
http://www.center.nitech.ac.jp/~sfukui/ouyou/list12-5.c
演習
 曜日に対応する文字列を表示する関数
void putweekstr(int n){ ・・・ }
を作成せよ。たとえばputweekstr(0)は、文字列 ”Sunday”
を表示する。
 曜日に対応する文字列へのポインタをかえす関数
char *weekstr(int n){ ・・・ }
を作成せよ。たとえばweekstr(0)は、文字列 ”Sunday”へ
のポインタを返すようにする。
 2つの「charへのポインタ」の中身を入れ換える関数
void swapptr(char *x, char *y){ ・・・ }
を作成せよ。