解答例10-4

【問1】

#include <stdio.h>

int main( void )
{
	char *p;
	p = "Winter";
	printf( "%s \n", p );
	
	return 0;
} 

【問2】

#include <stdio.h>

int main( void )
{
	char *p1, *p2;
	p1 = p2 = "Winter";
	
	while ( *p1 ) {
		++p1;
	}
	while ( p1 > p2 ) {
		--p1;
		putchar( *p1 );
	}
	putchar( '\n' );
	
	return 0;
}
この解答例について、質問をいただきましたので追記しておきます。

>この最初のwhile文がよくわかりません。
>できたら詳しく教えていただけないでしょうか?

最初のwhile文ですが、ここは書き換えると
while ( *p1 != '\0' ) {
	++p1;
}
になります。つまり、文字列の最後までポインタを進めています。

C言語に慣れている人はこれを解答例のように、
while ( *p1 ) {
	++p1;
}
と書きます。
これは、C言語では
	= 0:偽
	≠0:真と決められているため、
while( *p1!=0 )は「*p1が真の間」であり、
while( *p1 )と解釈できるためです。

私自身は実はこのような書き方は好きではないのですが、
C言語プログラマは好んでこの書き方を用いますので、
このような書き方も覚えておいてください。(2000.9.30)

【問3】

#include <stdio.h>
#include <string.h>
#define N 10
        
int main( void )
{
        char *p[N] = {
                "one", "two", "three", 
                "four", "five", "six", 
                "seven", "eight", "nine", 
                "ten"
        };
        char *temp;
        int i, j, min;

        for ( i = 0; i < N - 1; i++ ) {
                min = i;
                for ( j = i + 1; j < N; j++ ) {
                        /* 文字列の比較 */
                        if ( strcmp(p[min], p[j]) > 0 ) {
                                min = j;
                        }
                }
                /* ポインタの配列の入れ換え */
                temp = p[i];
                p[i] = p[min];
                p[min] = temp;
        }
        for ( i = 0; i < N; i++ )
                puts( p[i] );

        return 0;
}

問3の解答例の並び換えの手順を詳しく教えてほしいというメールをいただきましたので、解説図を書いてみました。

戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved