我有这个字符串: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
请帮忙。
答案 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;
}