ページ 11

文字コード for文

Posted: 2015年9月05日(土) 18:53
by sim
入力された文字が同じでなかった場合、文字コード順で先に来る方を出力するプログラム。
プログラムを作りましたが、正しくありません。指摘をお願いします。

コード:

#include <stdio.h>
#define NUM 50

int main(void)
{
	char str1[NUM];
    char str2[NUM];
    int i,j,count=0;
	
	printf("2つの文字列を入力してください。\n");
	printf("1つ目を入力してください。\n");
	scanf("%s",str1);
	printf("2つ目を入力してください。\n");
	scanf("%s",str2);

	/*入力された二つの文字を比較する処理*/
	for(i=0;i<NUM && str1[i]!='\0' || str2[i]!='\0';i++)
	{
		if(str1[i]==str2[i])
		{
			count++;
		}
		else
		{
			count=0;
		}
	}
	if(count>0)
	{
		printf("同じ文字列です。\n");
	}
	else
	{
		i=0;
		count=0;
		while(count==0)
		{
			if(str1[i]<str2[i])
			{
				count=1;
			}
			else if(str2[i]<str1[i])
			{
				count=2;
			}
			i++;
		}
	}
	/*二つの文字を比較して小さいほうを出力する処理*/
	if(count==1)
	{
		printf("小さい方は%sです。\n", str1);
	}
	else 
	{
		printf("小さい方は%sです。\n", str2);
	}
	return 0;
}

Re: 文字コード for文

Posted: 2015年9月05日(土) 19:21
by みけCAT
  • 最後の文字が一致する場合、途中までが違っていなくても「同じ文字列です」が出力されてしまいます。
  • 同じ文字列であった場合でも、必ず「小さい方は○○です。」が出力されてしまいます。
二度手間をかけずに、素直に書けばいいでしょう。

コード:

#include <stdio.h>
#define NUM 50

int main(void)
{
	char str1[NUM];
    char str2[NUM];
    int i,count=0;
	
	printf("2つの文字列を入力してください。\n");
	printf("1つ目を入力してください。\n");
	scanf("%s",str1);
	printf("2つ目を入力してください。\n");
	scanf("%s",str2);

	/*入力された二つの文字を比較する処理*/
	for(i=0;i<NUM && (str1[i]!='\0' || str2[i]!='\0');i++)
	{
		if(str1[i]<str2[i])
		{
			count=1;
			break;
		}
		else if(str2[i]<str1[i])
		{
			count=2;
			break;
		}
	}
	if(count==0)
	{
		printf("同じ文字列です。\n");
	}
	else if(count==1)
	{
		printf("小さい方は%sです。\n", str1);
	}
	else if(count==2)
	{
		printf("小さい方は%sです。\n", str2);
	}
	return 0;
}

Re: 文字コード for文

Posted: 2015年9月05日(土) 19:23
by sim
手間をかけて逆に難しいことをしていたんですね。
ありがとうございます。

Re: 文字コード for文

Posted: 2015年9月05日(土) 19:26
by みけCAT
解決したら、解決チェックをお願いします。
解決チェックをするには、投稿画面の「送信」ボタンの右にある「解決!」にチェックを入れた状態で返信を投稿してください。

Re: 文字コード for文

Posted: 2015年9月05日(土) 19:56
by sim
ありがとうございます