List8-1(str_dump.c)
ソースコード
#include<stdio.h>
#include<limits.h>
void str_dump(const char *s){
do{
int i;
printf("%c %0*X ",*s,(CHAR_BIT+3)/4,*s);
for(i=CHAR_BIT-1;i>=0;i--)
putchar(((*s>>i)&1U)?'1':'0');
putchar('\n');
}while (*s++ != '\0');
}
int main(void){
str_dump("STRING");
return 0;
}
実行結果

List8-2(str_ary1.c)
ソースコード
#include<stdio.h>
int main(void)
{
char st[10];
st[0]='A';
st[1]='B';
st[2]='C';
st[3]='D';
st[4]='\0';
printf("文字列stには\"%s\"が格納されています。\n",st);
return 0;
}

List8-3(str_ary2.c)
ソースコード
#include<stdio.h>
int main(void)
{
char st1[10]={'A','B','C','D'};
char st2[10]="ABCD";
printf("文字列stには\"%s\"が格納されています。\n",st1);
printf("文字列stには\"%s\"が格納されています。\n",st2);
return 0;
}

List8-4(str_ptr.c)
#include<stdio.h>
int main(void)
{
char *pt="12345";
printf("ポインタptには\"%s\"が格納されています。\n",pt);
return 0;
}

List8-5(swap_ptr.c)
#include<stdio.h>
void swap_ptr(char **x, char **y)
{
char *tmp=*x;
*x=*y;
*y=tmp;
}
int main(void)
{
char *s1="ABCD";
char *s2="EFGH";
printf("ポインタs1は\"%s\"を指しています。\n",s1);
printf("ポインタs2は\"%s\"を指しています。\n",s2);
printf("\nポインタs1の値は %p です。\n",s1);
printf("ポインタs2の値は %p です。\n",s2);
printf("\nポインタ&s1の値は %p です。\n",&s1);
printf("ポインタ&s2の値は %p です。\n",&s2);
swap_ptr(&s1,&s2);
puts("\nポインタs1とs2の値を交換しました。\n");
printf("ポインタs1は\"%s\"を指しています。\n",s1);
printf("ポインタs2は\"%s\"を指しています。\n",s2);
printf("\n");
return 0;
}

List8-6 / 7 / 8 (str_len.c)
#include<stdio.h>
int str_len1(const char *s)
{
int len=0;
while (s[len])
len++;
return len;
}
int str_len2(const char *s)
{
int len=0;
while(*s++)
len++;
return len;
}
int str_len3(const char *s)
{
const char *p=s;
while (*s)
s++;
return s-p;
}
int main(void)
{
char str[256];
printf("文字列:");
scanf("%s",str,sizeof(str));
printf("その文字列は%d文字です。(その1)\n",str_len1(str));
printf("その文字列は%d文字です。(その2)\n",str_len2(str));
printf("その文字列は%d文字です。(その3)\n",str_len3(str));
printf("\n");
return 0;
}

List8-9(str_chr.c)
#include<stdio.h>
int str_chr(const char *s,int c)
{
int i=0;
c=(char)c;
while (s[i]!=c)
{
if(s[i]=='\0')
return -1;
i++;
}
return i;
}
int main(void)
{
char str[64];
char tmp[64];
int ch;
int idx;
printf("文字列:");
scanf("%s",str);
printf("探す文字:");
scanf("%s",tmp);
ch=tmp[0];
if((idx=str_chr(str,ch))==-1)
printf("文字'%c'は文字列中に存在しません。\n",ch);
else
printf("文字'%c'は%d文字目に存在します。\n",ch,idx);
return 0;
}

List8-10(str_cmp.c)
#include<stdio.h>
#include<string.h>
int str_cmp(const char *s1,const char *s2)
{
while (*s1==*s2)
{
if(*s1=='\0')
return 0;
s1++;
s2++;
}
return (unsigned char)*s1-(unsigned char)*s2;
}
int main(void)
{
char st[128];
puts("\"ABCD\"との文字列を比較します");
puts("\"XXXX\"で終了します");
while (1)
{
printf("文字列st:");
scanf("%s",st,sizeof(st));
if(strcmp("XXXX",st)==0)
break;
printf("str_cmp(\"ABCD\",st)=%d\n",str_cmp("ABCD",st));
}
return 0;
}



コメント