#include <stdio.h> int main( void ) { char *p; p = "Winter"; printf( "%s \n", p ); return 0; }
#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)
#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の解答例の並び換えの手順を詳しく教えてほしいというメールをいただきましたので、解説図を書いてみました。
▼戻る▼
「初心者のためのポイント学習C言語」 Copyright(c) 2000-2004 TOMOJI All Rights Reserved