文字列bの最初の単語だけをコピーする関数の作成
Posted: 2007年3月27日(火) 09:51
前回作成した文字列bを文字列aにコピーする関数をもとにつくっています。
今回は単語のコピーで、単語の区切りは空白で表しています。また、文字列の先頭の空白は読み飛ばすようにします。
例えば
(入力) This is a pen
(出力)This
といった感じです。Thisの前の空白は読み飛ばしています。
そこで前回の文字列bを文字列aにコピーする関数を改変して以下のようなプログラムにしました。
#include<stdio.h>
int word_copy(char *p1,char *p2);
int main(void){
char a[256],b[256];
char *p1,*p2;
p1= a;
p2= b;
gets(p2);
word_copy(p1,p2);
return 0;
}
int word_copy(char *p1,char *p2){
int c=0;
while(*p2 != ' '){ /*文字列が空白になるまで*/
*p1 = *p2;
p1++;
p2++;
c++;
}
while(p1>p2){
p1--;
}
printf("%s\n",p1);
printf("length=%d\n",c);
return c;
}
このプログラムを実行すると、This is a penと入力した際にis a penと表示されてしまいます。
単語の長さはちゃんとThisの4が表示されるのですが、文字のほうが表示されません。
これはwhile文はちゃんと条件通りに行っているという事ですよね?
p1とp2共に空白のアドレスまで移動し、p1はそこから最初のアドレスまで戻っているのだからThisが表示されると思うのですが・・・
またこの場合だとThisの前に空白があると当然Thisは読み取られません。解決するにはどのようにしたらよいでしょうか?
今回は単語のコピーで、単語の区切りは空白で表しています。また、文字列の先頭の空白は読み飛ばすようにします。
例えば
(入力) This is a pen
(出力)This
といった感じです。Thisの前の空白は読み飛ばしています。
そこで前回の文字列bを文字列aにコピーする関数を改変して以下のようなプログラムにしました。
#include<stdio.h>
int word_copy(char *p1,char *p2);
int main(void){
char a[256],b[256];
char *p1,*p2;
p1= a;
p2= b;
gets(p2);
word_copy(p1,p2);
return 0;
}
int word_copy(char *p1,char *p2){
int c=0;
while(*p2 != ' '){ /*文字列が空白になるまで*/
*p1 = *p2;
p1++;
p2++;
c++;
}
while(p1>p2){
p1--;
}
printf("%s\n",p1);
printf("length=%d\n",c);
return c;
}
このプログラムを実行すると、This is a penと入力した際にis a penと表示されてしまいます。
単語の長さはちゃんとThisの4が表示されるのですが、文字のほうが表示されません。
これはwhile文はちゃんと条件通りに行っているという事ですよね?
p1とp2共に空白のアドレスまで移動し、p1はそこから最初のアドレスまで戻っているのだからThisが表示されると思うのですが・・・
またこの場合だとThisの前に空白があると当然Thisは読み取られません。解決するにはどのようにしたらよいでしょうか?