C - 删除字符串中特定char周围的空格

时间:2016-03-10 04:01:58

标签: c arrays char spaces

我有一个80个字符串(来自.txt文件的行)
在字符串末尾的某处,我有数字或字符串或字符,以及它们之间的“,”(逗号)。
我需要删除“,”这些空格,以便我可以通过strtok()获取它们 有任何想法吗 ?
例如:

String : " name: today 12 ,r ,ab,     5     ,   seven"<br>

我需要:" name: today 12,r,ab,5,seven"

3 个答案:

答案 0 :(得分:3)

您可以应用此算法::

  1. 找到元素,在本例中为空格。
  2. 用您选择的元素替换元素,在本例中为空字符。
  3. 此功能可能会将任何字符替换为字符串。您可以将char *replace函数添加为代码段,稍后将其用于类似目的。

       char *replace(const char *the_input_string, char the_character,
                     const char *replacing_string) 
      {
          int count = 0;
          const char *t;
          for(t=the_input_string; *t; t++)
              count += (*t == the_character);
    
          size_t rlen = strlen(replacing_string);
          char *res = (char*)malloc(strlen(the_input_string) + (rlen-1)*count + 1);
          char *ptr = res;
          for(t=the_input_string; *t; t++) 
          {
              if(*t == the_character) 
              {
                  memcpy(ptr, replacing_string, rlen);
                  ptr += rlen;
              }
              else 
                  *ptr++ = *t;
          }
          *ptr = 0;
          return res;
      }
    

    司机程序::

    int main(int argc, char const *argv[])
    {
        const char *s = replace("name: today 12 ,r ,ab, 5 , seven", ' ', "");
        printf("%s\n", s);
        return 0;
    }
    

    请参阅this link ,代码可能与此类似,但使用上述代码,因为提到的解决方案可能会引发一些错误或警告。

答案 1 :(得分:0)

你可以尝试一下!
必要时替换为您的代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{   int i;
    char line[] = "name: today 12 ,r ,ab, 5 , seven";
    int length = strlen(line);
    char line2[length];
    for(i = 0; i<length; i++) {
        if(!isspace(line[i])) {
             line2[i] = line[i];
        }
    }
    for(i = 0; i<length; i++){
        printf("%c", line2[i]);
    }
    return 0;
}

答案 2 :(得分:0)

因为结果字符串将比原始字符串短,所以您可以进行替换:当您找到逗号时,复制它并跳过以下空格。要在逗号之前处理空格,请跟踪最后一个非空格字符后的第一个空格,并在必要时跳过该空格:

    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>

    void remspc(char *str)
    {
        char *first = str;          // dest. char after last non-space
        char *q = str;              // destination pointer

        // skip leading white space
        while (isspace((unsigned char) *str)) str++;

        while (*str) {
            if (*str == ',') {
                q = first;          // skip space before comma
                *q++ = *str++;
                first = q;

                // skip space after comma
                while (isspace((unsigned char) *str)) str++;
            } else {
                // remember last non-space
                if (!isspace((unsigned char) *str)) first = q + 1;
                *q++ = *str++;
            }
        }

        *first = '\0';
    }

    int main(void)
    {
        char str[] = " name: today 12, r ,ab,   ,   5     ,   seven";

        remspc(str);
        puts(str);

        return 0;
   }

此解决方案将运行由空格分隔的逗号,这可能会导致strtok出现问题,因为它会将逗号延伸视为单个分隔符。