簡體   English   中英

C-刪除字符串中特定字符周圍的空格

[英]C - Delete spaces around specific char in string

我有80個字符的字符串(.txt文件中的行)
在字符串末尾的某個地方,我有數字,字符串或字符以及它們之間的“,”(逗號)。
我需要刪除“,”周圍的這些空格,以便能夠通過strtok()獲得它們。
有任何想法嗎 ?
例如 :

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

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

您可以應用此算法::

  1. 查找元素,在這種情況下為空格。
  2. 用您選擇的元素替換該元素,在這種情況下為空字符。

該函數可能很方便將任何字符替換為字符串。 您可以將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;
}

請參考此鏈接 ,代碼可能是相似的,但使用上面的代碼,因為提到的解決方案可能會引發一些錯誤或警告。

您可以嘗試一下!
必要時替換為您的代碼。

#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;
}

由於生成的字符串將比原始字符串短,因此可以就地進行替換:找到逗號后,將其復制並跳過以下空格。 要在逗號前處理空格,請跟蹤最后一個非空格字符后的第一個空格,並在必要時也跳過該空格:

    #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出現問題,因為它將逗號擴展視為單個定界符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM