-2

我需要阅读文本并查找单词之间是否有多个空格。

如果有,则将其更改为一个。

例如,如果我有一个文本:

My         name     is      Lukas

程序应将其更改为:

My name is Lukas

有任何想法吗?

4

5 回答 5

1
while (*str) {
  if (*str != ' ' || str[1] != ' ') *newstr++ = *str;
  str++;
}

*newstr = 0;
于 2013-02-16T17:07:09.310 回答
0

根据您之前的查询,我修改了逻辑以满足您的要求。希望这可以帮助。

FILE *in;
char ch,str[100],cw;
int j,i = 0;
int isSpace = 0;

in=fopen("duom.txt","r");

if(in){
    while(!feof(in)){
    ch=getc(in);
    if(isSpace)
        isSpace = (isSpace & (ch == ' '));
    if(!isSpace) {
        str[i] = ch;
        i++;
    }
    if(ch == ' ')
        isSpace = 1;

}

for(j=0;j<i;j++){
    printf("%c",str[j]);
}
于 2013-02-16T16:51:09.163 回答
0

isspacefrom<ctype.h>在这里可能有用。这是一个可能的实现:

void delete_multiple_spaces(char *dst, const char *src)
{
    int previous = 0;
    int c;

    while ((c = *src++) != '\0')
    {
        if (isspace(c) && !previous)
        {
            previous = 1;
        }
        else
        {
            if (previous)
            {
                *dst++ = ' ';
                previous = 0;
            }

            *dst++ = c;
        }
    }

    *dst = '\0';
}
于 2013-02-16T16:53:12.187 回答
0
   j = 0;
   for(i=0; myStr[i] != '\0'; i++) {
      if(myStr[i] == ' ' && myStr[i+1] == ' ') 
          continue; 
      newStr[j] = myStr[i];
      j++;
   }

并且不要忘记将'\0'(表示字符串的结尾)添加到末尾newStr

于 2013-02-16T16:58:36.537 回答
0
char *(strdupcompact) (const char *c)
{
 int i; int p;


 for (i = 0, p = 0; c[i]; i++, p++)
 {
  if (c[i] == ' ') while (c[i+1] == ' ') i++;
 }

 char *newstr = malloc(p + 1);


 for (i = 0, p = 0; c[i]; i++, p++)
 {
  newstr[p] = c[i];
  if (c[i] == ' ') while (c[i+1] == ' ') i++;
 }
 newstr[p] = 0;

 return newstr;
}

制作您的字符串的 malloced 副本。

于 2013-02-16T17:08:15.600 回答