ポインタを使った文字列交換
Posted: 2010年9月12日(日) 16:35
重要課題 12..3
2つのchar型配列x[/url],y[/url]に格納された文字列を入れ替えるプログラムを作 成せよ.ただし入替え処理には,関数swap_string(char [/url],char [/url])を作 成して用いること.下記の例では,2つの文字列xとyをキーボードから入力し,入 れ替えた後に表示している.
% ./stringSwap
文字列x (20字まで)? Ritsumeikan
文字列y (20字まで)? BKC
関数swap_string()を呼び出しました
入替後の x: "BKC"
入替後の y: "Ritsumeikan"
%
発展課題 14..2
重要課題12.3で作成した関数をポインタを使って実現せ よ。すなわち、2つのchar型配列x[/url],y[/url]に格納された文字列を入れ替える プログラムを,関数swap_stringWithPointer(char *, char *)を用いて実 装せよ.下記の例では,2つの文字列xとyをキーボードから入力し,入れ替えた後 に表示している.
% ./stringSwap
文字列x (20字まで)? Ritsumeikan
文字列y (20字まで)? BKC
入替後の x: "BKC"
入替後の y: "Ritsumeikan"
%
学校の前期の課題を復習していてわからないことがあったので質問します。
自分で考えてソースを書いてコンパイルして実行するとなぜか入力できなくなっています。
どう直せばよいでしょうか?
自分が書いたソース↓
#include <stdio.h>
# define BUFFER_SIZE (20)
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
void swap_string(char *,char *);
int main(void){
int i,j;
char arrayX[BUFFER_SIZE],arrayY[BUFFER_SIZE];
char *p,*q;
//pの初期値を配列の先頭に設定
p = arrayX;
q = arrayY;
//入力
printf("文字列x(20字まで) :");
for(i=0; i!='\0' ; i++){
*p = get_int();
p++;
}
printf("\n");
printf("文字列y(20字まで) :");
for(j=0; j!='\0' ; j++){
*q = get_int();
q++;
}
printf("\n");
swap_string(p,q);
printf("入り替え後のx :");
for(i=0 ; i !='\0'; i++){
printf("%c",*p);
}
printf("\n");
printf("入り替え後のy :");
for(j=0; j!= '\0'; j++){
printf("%c",*q);
}
printf("\n");
return 0;
}
void swap_string(char *a,char *b){
int i,temp[BUFFER_SIZE];
for(i=0 ; i< BUFFER_SIZE ; i++){
temp = *a;
*a = *b;
*b = *a;
a++;
b++;
}
}
z
2つのchar型配列x[/url],y[/url]に格納された文字列を入れ替えるプログラムを作 成せよ.ただし入替え処理には,関数swap_string(char [/url],char [/url])を作 成して用いること.下記の例では,2つの文字列xとyをキーボードから入力し,入 れ替えた後に表示している.
% ./stringSwap
文字列x (20字まで)? Ritsumeikan
文字列y (20字まで)? BKC
関数swap_string()を呼び出しました
入替後の x: "BKC"
入替後の y: "Ritsumeikan"
%
発展課題 14..2
重要課題12.3で作成した関数をポインタを使って実現せ よ。すなわち、2つのchar型配列x[/url],y[/url]に格納された文字列を入れ替える プログラムを,関数swap_stringWithPointer(char *, char *)を用いて実 装せよ.下記の例では,2つの文字列xとyをキーボードから入力し,入れ替えた後 に表示している.
% ./stringSwap
文字列x (20字まで)? Ritsumeikan
文字列y (20字まで)? BKC
入替後の x: "BKC"
入替後の y: "Ritsumeikan"
%
学校の前期の課題を復習していてわからないことがあったので質問します。
自分で考えてソースを書いてコンパイルして実行するとなぜか入力できなくなっています。
どう直せばよいでしょうか?
自分が書いたソース↓
#include <stdio.h>
# define BUFFER_SIZE (20)
int get_int(void)
{
char buf[BUFFER_SIZE];
fgets(buf, BUFFER_SIZE, stdin);
return atoi(buf);
}
void swap_string(char *,char *);
int main(void){
int i,j;
char arrayX[BUFFER_SIZE],arrayY[BUFFER_SIZE];
char *p,*q;
//pの初期値を配列の先頭に設定
p = arrayX;
q = arrayY;
//入力
printf("文字列x(20字まで) :");
for(i=0; i!='\0' ; i++){
*p = get_int();
p++;
}
printf("\n");
printf("文字列y(20字まで) :");
for(j=0; j!='\0' ; j++){
*q = get_int();
q++;
}
printf("\n");
swap_string(p,q);
printf("入り替え後のx :");
for(i=0 ; i !='\0'; i++){
printf("%c",*p);
}
printf("\n");
printf("入り替え後のy :");
for(j=0; j!= '\0'; j++){
printf("%c",*q);
}
printf("\n");
return 0;
}
void swap_string(char *a,char *b){
int i,temp[BUFFER_SIZE];
for(i=0 ; i< BUFFER_SIZE ; i++){
temp = *a;
*a = *b;
*b = *a;
a++;
b++;
}
}
z