检查String中是否存在\ n

时间:2012-03-02 12:46:45

标签: c string

我正在尝试比较两个字符串,即使它们看起来相同,但我没有得到匹配。变成一个包含\ n。

的字符串

所以我的问题是,是一种检查字符串是否包含'\ n'的方法吗? 我正在使用strcmp函数;

char *tempData;
char *checkThis;
tempData = "Hello \n";
checkThis = "Hello";
if(strcmp(tempData, checkThis) == 0)
{
  printf("Match");
}

3 个答案:

答案 0 :(得分:2)

您可以在比较之前剥离空白区域,然后您不需要检查'\ n'。但是你可以只比较字符串,假设这就是你想要的。

This question对于如何在C中做到这一点有一些答案。

答案 1 :(得分:2)

创建您自己的比较函数,忽略\n或您传入的任何其他字符:

int strcmp_ignoring_char(const char* s1, const char* s2, const char ignore)
{
   while ( *s1 != '\0' && *s1 != '\0' )
   {
      if ( *s1 == ignore )
      {
          s1++;
          continue;
      }

     if ( *s2 == ignore )
      {
          s2++;
          continue;
      }

      if ( *s1 != *s2 )
          return *s1 > *s2 ? 1 : -1;

      s1++;
      s2++;
   }

   /* modified to account for trailing ignore chars, as per Lundin comment */

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

   const char* nonEmpty = *s1 == '\0' ? s2 : s1;
   while ( *nonEmpty != '\0' )
       if  ( *nonEmpty++ != ignore )
       return 1;

   return 0;
}

这样你就不会扫描两次琴弦了。

您还可以创建忽略字符串的变体,而不是单个字符:

int strcmp_ignoring_char(const char* s1, const char* s2, const char* ignore)

答案 2 :(得分:0)

这是我的尝试。我试图保持MISRA-C兼容,除了C99功能。

#include <stdint.h>
#include <stdbool.h>
#include <ctype.h>
#include <stdio.h>


int8_t strcmp_ignore_space (const uint8_t* s1, const uint8_t* s2)
{
  while ((*s1 != '\0') && (*s2 != '\0'))
  {
    bool space1 = isspace(*s1);
    bool space2 = isspace(*s2);

    if(space1)
    {
      s1++;
    }
    if(space2)
    {
      s2++;
    }

    if (!space1 && !space2)
    {
      if (*s1 != *s2)
      {
        break;
      }
      else
      {
        s1++;
        s2++;
      }
    }
  } // while ((*s1 != '\0') && (*s2 != '\0'))

  if(*s1 != '\0')                      // remove trailing white spaces
  {
    while(isspace(*s1))
    {
      s1++;
    }
  }

  if(*s2 != '\0')                      // remove trailing white spaces
  {
    while(isspace(*s2))
    {
      s2++;
    }
  }

  return (int8_t)( (int16_t)*s1 - (int16_t)*s2 );
}


int main()
{
  // obscure strings with various white space characters, but otherwise equal
  if(strcmp_ignore_space("  He\vllo \n",
                         "\r He\fll o ") == 0)
  {
    printf("Same\n");
  }
  else
  {
    printf("Different\n");
  }


  return 0;
}