C中的字符串匹配而不使用任何预定义函数?

时间:2013-12-05 13:43:22

标签: c string

这是我的代码。我在循环的帮助下匹配字符串。我不想为它使用任何功能。

  int main()
  {
      int flag,j;
      char a[30]={'\0'};
      char b[]="this is a dog";

      printf("enter string \n");
      gets(a);

      int p = strlen(b);

     for(j=0;j<p;j++)
     {
         if(a[j]==b[j])
         {
             flag=0;
         }
         else
             flag=1;
         break;
     }
        if(flag==0)
           printf("yes");
        else
           printf("no");

    return 0;
  }

问题是它正在以错误的方式检查字符串 就像“这是一只狗”和“这是一个男人”一样,它就是平等的。

7 个答案:

答案 0 :(得分:3)

您的break语句超出else,这会导致您的循环在第一次迭代后中断。你需要这个

else
{
     flag=1;
     break;
}

答案 1 :(得分:2)

你正在使用strlen。你不需要那个。

C字符串应该匹配,直到其中一个字符串有'\0'或其中一个字符不同。

char* pa = a;
char* pb = b;
while (*pa != *pb && *pa && *pb) {
    ++pa; ++pb;
}

// a equals b if (*pa == *pb) == true
// BTW, in equality they will both be zero which is the stop condition for the loop

printf("strings are %s", (*pa == *pb) ? "equal" : "different");

答案 2 :(得分:1)

不使用strlen(预定义函数)执行此操作:

 int main(){
  int flag=0,j,i=0;
  char b[]="this is a dog\0";
  printf("enter string \n");

  char input[50]; // change the size to compensate for your biggest input

  char get; // variable to collect input character one by one

  get = getchar(); // get the first character

  while(get!='\n'){ // I am assuming \n marks the end of input
     input[i] = get; // put that character into the input array
     i++;            // incriment counter ( replaces strlen as it counts how much is read )
     get = getchar(); // get the next character
  }


     for(j=0;j<i;j++){
        if(input[j]==b[j]){
          // do nothing .. keep looping to see if other characters are the same too
        }else{
         flag=1;  // the very first character that is different  .. break from loop and print not same
         break;
        }
     }   

     if(flag==0){
        printf("yes\n");
     }else{
        printf("no\n");

     }

   return 0;

答案 3 :(得分:1)

这里看起来你忘记了} - 做适当的缩进是好的

for(j=0;j<p;j++)
{
  if(a[j]==b[j])
  {
     flag=0;
  }
  else
    flag=1;
  break;
}

中断将使你的循环在第一次迭代时退出。

答案 4 :(得分:1)

这是我的代码:

     int main(){
    int flag,j;
    char a[30]={'\0'};
     char b[]="This is a dog";
    printf("enter string \n");
     gets(a);
     int p = strlen(b);

         for(j=0;j<p;j++){
            if(a[j]==b[j]){
             flag=0;
            }else{
            flag=1;
            break;
           }
           }
       if(flag==0)
         printf("yes");
          else
        printf("no");
       return 0;
         }

答案 5 :(得分:0)

可能有用:{{3p>

答案 6 :(得分:0)

应该是这样的:

for(j=0;j<p;j++)
 {
     if(a[j]==b[j])
     {
         flag=0;
     }
     else 
     {
         flag=1;
         break;
     }
 }

if(flag==0)
       printf("yes");
else
       printf("no");