0

タイトルが示すように、ポインターを使用して strend 関数を作成する必要があります。この関数は、2 番目の文字列が最初の文字列の末尾に表示されるかどうかを確認し、表示される場合は 1 を返し、表示されない場合は 0 を返します。これが私のコードですが、そうではありませんコンパイルして、代入エラーで非左辺値を与える.何かアイデアはありますか?

#include <stdio.h>
#define MAX 100
int strend (char *s1,char *s2);
int main()
{
    char string1[MAX]="Check Mate";
    char string2[MAX]="Mate";
    printf("The Result is :\n");
    printf("%d",strend(string1,string2));
    return 0;
}
int strend (char *s1,char *s2)
{
    for(;*s1!='\0';s1++)
                        { for(;*s2!='\0' && *s1!='\0' && *s1==*s2;s1++,s2++)
                                       ;
                                       }
    if(*s1='\0' && *s2='\0')
                return 1;
    else 
                return 0;
}
4

3 に答える 3

3

コンパイラによって表示されるエラーは、 ではないものに代入しようとしていることを示していますLVALUE。簡単に言えばLVALUE、割り当ての左側に表示される可能性のある用語を指します (実際には、それよりもはるかに複雑です ;) )

==代わりに等値比較に使用する必要があります=

if (*s1 == '\0' && *s2 == '\0')
    return 1;
else 
    return 0;

*s2 = '\0'また、コンパイラは でエラーを表示しており、最初の代入について不平を言っていないことに注意して*s1 = '\0'ください (プログラムの要件に対して論理的に正しくありませんが)。

つまり、コンパイラは次のステートメントだけでは LVALUE エラーを表示しませんでした。

if (*s1 = '\0')

があった場合にのみ&& *s2 = '\0'、エラーが表示されました。

また、以下のコメントで teppic が指摘したように、式にif(*s1 = ('\0' && *s2) = '\0') 含めることができないため、式が (演算子の優先順位のために) 同等に評価され、コンパイラに LVALUE エラーが表示されたためです0 = 0

于 2013-03-10T21:40:03.390 に答える
0

*s2!='\0'最初の For 条件に追加する必要がありました。

于 2013-03-10T21:46:18.830 に答える
0

このスニペットをチェックしてください。

char str1[50]="Check Mate";
char str2[50]="Mate";
int flag,i,l1,l2;

l1=strlen(str1);
l2=strlen(str2);
/*
 * Place a pointer to the end of strings 1 and strings 2 . 
 */
char *ptrend1 = (str1+l1-1);
char *ptrend2 = (str2+l2-1);


flag = 1; 
for(i=l2;i>0;i--)
{
    /*
     * Keep traversing such that in case the last charachters of the stings
     * dont match break out . 
     */
    if(*ptrend2 != *ptrend1){
        flag = 0 ;
        break;
    }
    /*
     * Decrement both the end pointers 
     */
    ptrend1--;
    ptrend2--;
}
if(flag)
    printf("String 2 is contained at the end of string 1");
else 
    printf("String 2 is NOT contained at the end of string 1");
return 0;
于 2013-03-11T04:02:12.720 に答える