C言語でgrep関数と同じ動作をするプログラムを作る宿題が出たのですが、
なかなかうまくできません。またポインタを使用するものとする
何回も作り直したのですが、うまくいかずに困り果てています。
自分の力だけで解決したかったのですが、提出期限が今日です。
どなたかご教授ください。
grep関数
Re: grep関数
ソースを張らせていただきます。
アドバイスいただけると光栄です。
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int main()
{
char str1[MAX], str2[MAX];
char *p1, *p2;
char count = 0, d = 0;
char i_temp = 0,d_temp,first_count = 0;
char i_max = 0;
p1 = str1;
p2 = str2;
printf("Input str1 <");
scanf("%s",str1);
printf("Input str2 <");
scanf("%s",str2);
for (; str2[i_max] != '\0'; i_max++)
;
while (1){
while (*(p2 + i) != *(p1 + d))
d++;
if (*(p2 + i) == *(p1 + d)){
i_temp = i;
first_count = i;
d_temp = d;
for (; i_temp < i_max || *(p2 + i_temp) == *(p1 + d_temp); i_temp++){
d_temp++;
i_temp++;
if (*(p2 + i_temp) == '\0'){
printf("%d",first_count);
exit(1);
}
}
}
i++;
}
if (*(p2 + i_temp) != '\0'){
printf("0");
exit(1);
}
return 0;
}
アドバイスいただけると光栄です。
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int main()
{
char str1[MAX], str2[MAX];
char *p1, *p2;
char count = 0, d = 0;
char i_temp = 0,d_temp,first_count = 0;
char i_max = 0;
p1 = str1;
p2 = str2;
printf("Input str1 <");
scanf("%s",str1);
printf("Input str2 <");
scanf("%s",str2);
for (; str2[i_max] != '\0'; i_max++)
;
while (1){
while (*(p2 + i) != *(p1 + d))
d++;
if (*(p2 + i) == *(p1 + d)){
i_temp = i;
first_count = i;
d_temp = d;
for (; i_temp < i_max || *(p2 + i_temp) == *(p1 + d_temp); i_temp++){
d_temp++;
i_temp++;
if (*(p2 + i_temp) == '\0'){
printf("%d",first_count);
exit(1);
}
}
}
i++;
}
if (*(p2 + i_temp) != '\0'){
printf("0");
exit(1);
}
return 0;
}
- bitter_fox
- 記事: 607
- 登録日時: 14年前
- 住所: 大阪府
Re: grep関数
grep関数って何でしょう?初心者 さんが書きました:C言語でgrep関数と同じ動作をするプログラムを作る宿題が出たのですが、
仕様がはっきりしないと答えようがないので、どういう入力の時にどういう出力をするのかを教えてくれますか?
Re: grep関数
上に貼り付けられたプログラムを読んでみると、とてもgrepと同じコマンドだとは思えません。bitter_foxさんがお尋ねのように別にgrep関数ってのがあるのでしょうか。読んだ感じでは、str1の文字列にstr2の文字列があるか検索し、見つかった場所の文字位置を返す関数のようですが。strstr関数の間違いではないでしょうか。
non