文字列探索(8-1)

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;
}

実行結果

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

「現役エンジニアが教える、AI時代のプログラミングを楽しく学ぶ」

Python・JavaScriptを中心に、今話題のChatGPTとPythonを組み合わせた自動化・業務効率化・最新のAI活用術を、現役のプロ目線で分かりやすく紹介。

初心者でも実践できる、現場で役立つ内容で、“自分の手で作れる”を力強く応援しています。

コメント

コメントする

目次