C ---删除字符串中的所有多余空格,不包括指定字符之间的字符

时间:2016-01-23 03:49:57

标签: c string char

我有这个字符串:print "Foo cakes are yum" 我需要以某种方式删除所有额外的空格,但仅在引号之间留下文本。这就是我到目前为止所做的:

char* clean_strip(char* string)
{
    int d = 0, c = 0;
    char* newstr;
    while(string[c] != '\0'){
         if(string[c] == ' '){
            int temp = c + 1;
            if(string[temp] != '\0'){
                while(string[temp] == ' ' && string[temp] != '\0'){
                    if(string[temp] == ' '){
                        c++;
                    }
                    temp++;
                }
            }
        }
        newstr[d] = string[c];
        c++;
        d++;
     }
    return newstr;
}

返回此字符串:print "Foo cakes are yum"

我需要能够在引号之间跳过文字,所以我得到了这个:print "Foo cakes are yum"

这是同样的问题但是对于php,我需要一个答案:pass an object as the first argument of Ember.run.later

请帮忙。

2 个答案:

答案 0 :(得分:1)

试试这个:

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

char* clean_strip(char* string)
{
    int d = 0, c = 0;
    char* newstr = malloc(strlen(string)+1);
    int quoted = 0;

    while(string[c] != '\0'){
        if (string[c] == '"') quoted = !quoted;

         if(!quoted && string[c] == ' '){
            int temp = c + 1;
            if(string[temp] != '\0'){
                while(string[temp] == ' ' && string[temp] != '\0'){
                    if(string[temp] == ' '){
                        c++;
                    }
                    temp++;
                }
            }
        }

        newstr[d] = string[c];
        c++;
        d++;
     }
    newstr[d] = 0;
    return newstr;
}


int main(int argc, char *argv[])
{
    char *input = "print     \"Foo cakes      are   yum\"";
    char *output = clean_strip(input);
    printf(output);
    free(output);
    return 0;
}

这将产生输出:

print "Foo cakes      are   yum"

通过查找"字符来工作。如果发现它切换变量quoted。如果quoted为真,则跳过空白删除。

此外,您的原始函数永远不会为newstr分配内存。我添加了newstr = malloc(...)部分。在写入字符串之前为字符串分配内存非常重要。

答案 1 :(得分:0)

我简化了你的逻辑。

int main(void)
{
    char string[] = "print     \"Foo cakes      are   yum\"";
    int i = 0, j = 1, quoted=0;
    if (string[0] == '"')
    {
        quoted=1;
    }
    for(i=1; i< strlen(string); i++)
    {
        if (string[i] == '"')
        {
            quoted = 1-quoted;
        }
        string[j] = string[i];
        if (string[j-1]==' ' && string[j] ==' ' && !quoted)
        {
            ;
        }
        else
        {
            j++;
        }
    }
    string[j]='\0';
    printf("%s\n",string);
    return 0;

}