【问题标题】:In C find string and cut some symbols from left and right在C中查找字符串并从左右剪切一些符号
【发布时间】:2014-08-14 06:07:51
【问题描述】:

变量可以包含 3-4HYTER3(OK)或 [ID] = "3-4HYTER3"(错误)

需要在字符串中剪切错误的符号,例如:[ID] = "3-4HYTER3" 应该是:3-4HYTER3

如何找到错误的字符串 [ID] = 3-4HYTER3 并剪切 [ID] = " " ?

请帮帮我!

【问题讨论】:

  • 请多解释!!!
  • 阅读regular expressions,寻找具有替换功能的正则表达式库。
  • 或者将“读数”固定到“变量”中,这样​​你总能得到正确的值。

标签: c text-parsing


【解决方案1】:

如果我理解你的话,你会想要类似 -

const char *removeId(const char *input) {
  const char *pattern = "[ID] = \"";
  const size_t patternLen = strlen(pattern);
  if (strncmp(input, pattern, patternLen) == 0) {
    size_t outLen = strlen(input) - patternLen;
    char *out = (char *) malloc(sizeof(char *) * outLen);
    strncpy(out, input+patternLen, outLen - 1);
    out[outLen - 1] = '\0';
    return out;
  }
  return input;
}

int main(int argc, char *argv[]) {
  const char *input = "[ID] = \"3-4HYTER3\"";
  puts(input);
  puts(removeId(input));
}

输出是

[ID] = "3-4HYTER3"
3-4HYTER3

【讨论】:

    【解决方案2】:

    除了关于切割不需要的ID的答案之外,如果您有大量字符串要搜索以识别哪些包含不需要的字符,例如您的示例中的=符号,您可以使用一个简单的函数来搜索字符串中的字符并根据需要采取措施:

    /* char in string - returns 1 if found, 0 otherwise
       (could make (void *) and return 'p' or NULL)
    */
    int
    chr_in_str (char *str, char c)
    {
        char *p = str;
        while (*p != '\0') {
            if (*p == c)
                return 1;
            p++;
        }
        return 0;
    }
    

    只需在测试中传递字符串和感兴趣的字符:

    if (chr_in_str (str, '='))
        removeId (str);      // removeId from Elliots answer
    

    【讨论】:

      【解决方案3】:
      #include <stdio.h>
      #include <stdbool.h>
      #include <string.h>
      
      #define VALID_CHAR_SET "abcdefghijklmnopqrstuvwxyz"\
                             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\
                             "0123456789"\
                             "-_"
      
      static inline bool isValidChar(char ch){
          //or use is isalnum() etc.. in <ctype.h>
          // return isalnum(ch) || ch == '-' /* ... */;
          return !!strchr(VALID_CHAR_SET, ch);//Simple implementation
      }
      
      int removeInvalidChar(char *str){
          char *to;
          int count = 0;
          for(to=str;*str;++str){
              if(isValidChar(*str))
                  *to++ = *str;
              else
                  ++count;
          }
          *to = '\0';
          return count;
      }
      
      int main(){
          char str[]="\"3-4HYTER3\"";
          if(removeInvalidChar(str)){
              printf("removed the invalid character.\n");
          }
          printf("%s\n", str);
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2019-05-24
        • 2013-07-08
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多