今週は,関数に配列を渡す練習をします.特に文字列を扱う関数を取り上げます.まず,入力された文字の長さを返す関数を作ってみましょう.
まず,配列を受け渡している例を見てください.
#include <stdio.h> void dim_init(int *ary, int no, int val) { int i; for(i = 0; i < no; i++){ ary[i] = val; } } void main() { int i; int ary[] = {1,2,3,4,5}; dim_init(ary, 5, 0); for(i =0; i < 5; i++){ printf("ary[%d] = %d\n", i, ary[i]); } }
このプログラムは,配列aryの先頭からno番目までの要素の値をvalに設定する関数です.関数の初期化などの際に用います.関数には,配列の先頭のアドレス(ary)が渡されるので,関数側ではポインタ(int *ary)で受け取っています.
文字列は,配列として扱うことを思い出してください.関数に文字列を受け渡すには,上記の配列の場合と同様,ポインタを用います.
ここで,文字の長さを数えるプログラムを関数を用いて書き換えてみよう.
#include <stdio.h> void main() { char str[128]; int i; printf("文字列を入力してください:"); scanf("%s", str); for(i = 0; str[i] != 0x00; i++); printf("入力された文字列は,%sです.", str); printf("文字数は,%dです.",i); }
ここで,青い色の部分を関数にしてみよう.
#include <stdio.h> int moji_nagasa(char *str) { int i; for(i = 0; str[i] != 0x00; i++); return(i); } void main() { char str[128]; int i; printf("文字列を入力してください:"); scanf("%s", str); printf("入力された文字列は,%sです.", str); printf("文字数は,%dです.", moji_nagasa(str)); }
手順:
文字数を数える関数を用いて,文字数を数える
二つの文字を入れ替えるswapという関数を作る
swap関数をもちいて,配列の並べ替えをするsortという関数を作る
(ヒント)関数の中から,すでに定義してある別の関数を呼び出して使うことができる.
#include <stdio.h> void main() { char s[256], t; int n, i, j; //文字列の入力 printf("単語を入力してください\n"); scanf("%s", s); printf("入力された文字列は%sです.\n", s); // 文字数を数える for(i=0; s[i] != 0x00; i++); printf("文字数は,%d文字です.\n", i); n = i; // 並び替え for(i=0; i < n-1; i++){ for(j=i+1; j < n; j++){ if(s[i] > s[j]){ t = s[i]; s[i] = s[j]; s[j] = t; } } } printf("結果 : %s\n", s); }