今週は,関数に配列を渡す練習をします.特に文字列を扱う関数を取り上げます.まず,入力された文字の長さを返す関数を作ってみましょう.
まず,配列を受け渡している例を見てください.
#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);
}