English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

#include
#include
#include
#define num 256
int x,n,m;
int my_str(char [],char [],int,int);
int main(int argc,char *argv[])
{

char a[num],b[num];
strcpy(a,argv[1]);
strcpy(b,argv[2]);
m=strlen(b);
n=strlen(a);

x=my_str(a,b,m,n);
switch(x)
{
case 0:
printf("got it\n");
break;
case 1:
printf("oh no\n");
break;
}
return 0;
}
int my_str(char a[],char b[],int m,int n)
{
int y,i,j,k,l=0;
char tmp[num];
k=n-m;
for(i=0;i {
for(j=i;j

tmp[l]=a[j];

l++;
}

l=0;
y=strcmp(tmp,b);
if(y==0)
return y;
else
return 1;
}

2007-02-08 20:38:50 · 2 個解答 · 發問者 昱光 1 in 電腦與網際網路 程式設計

2 個解答

// 您的程式錯誤
#define num 256
// 找 b 在 a中
// m 為 b 的長
// n 為 a 的長
int my_str(char a[],char b[],int m,int n)
{
int y,i,j,k,l=0;
char tmp[num];
k=n-m;
for(i=0;i {
for(j=i;j { // 少了 { } 所以 l 不會被內部loop 每次+1
tmp[l]=a[j]; // 您把 a 從a[i]~a[i+m] copy 到tmp 中,m 為b 的長
l++;
}
// copy 完了
// 最後沒有把 \0 補到自串尾巴所以要加入下面一行
tmp[l]='\0';
l=0;

y=strcmp(tmp,b); // 比較 tmp 跟b
// strcmp 傳回0 表示 tmp 跟b 是一樣的 非0 不一樣
if(y==0) // 0 是一樣的
return 1;

// 繼續下一個i 您本來的程式把y=strcmp ... 寫到for(i=0;i .. ) 的loop 外. 所以只會比最後一次
}

return 0;
}
// 令您的my_str 參數的排法見議改成
// int my_str(const char *a,const char *b,const int na,cont int nb);
// na 為 a 的長
// nb 為 b 的長


2007-02-09 04:50:57 · answer #1 · answered by SiYu 5 · 0 0

你試圖從 a 中截取與 b 等長的字串來比較
但是做法不對
int my_str(char a[],char b[],int m,int n)
{
int y,i,j,k,l=0;
char tmp[num];
k=n-m;
for(i=0; i {
strncpy(tmp, &(a[i]), m);
y=strcmp(tmp,b);
if(y==0)
return y;
/*
for(j=i;j tmp[l]=a[j];
l++;
*/
}

/*l=0;
y = strcmp(tmp,b);
if (y==0)
return y;
else
*/
return 1;
}
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.

2007-02-09 05:33:57 · answer #2 · answered by JJ 7 · 0 0

fedest.com, questions and answers