2013-02-16 76 views
-2

我需要阅读文本并查找单词之间是否有多个空格。将单词间的多个空格更改为一个

如果有更改为1。

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

My   name  is  Lukas 

计划应将其更改为:

My name is Lukas 

任何想法?

+7

检出['isspace'](http://en.cppreference.com/w/c/string/byte/isspace)并理解循环可能是一个好的开始。 – 2013-02-16 16:44:31

+3

你有什么想法吗?我们可以听取他们的意见并对他们发表评论! – 2013-02-16 16:46:28

+0

感谢你们真的帮助过我,对我的粗俗抱歉:/ – 2013-02-16 16:58:14

回答

0
j = 0; 
    for(i=0; myStr[i] != '\0'; i++) { 
     if(myStr[i] == ' ' && myStr[i+1] == ' ') 
      continue; 
     newStr[j] = myStr[i]; 
     j++; 
    } 

而且不要忘了添加'\0'(表示字符串结束)到newStr

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]); 
} 
+0

你假设OP正在执行文本的实时输入,但我认为这不是一个有效的(或有用的)假设。 – mah 2013-02-16 16:55:51

+0

@mah我已经提到同一个用户的上一个问题http://stackoverflow.com/questions/14911803/how-to-read-text-from-textfile-and-store-every-character-in-an-数组/ 14911898#14911898。我有反正更新了整个程序 – Ganesh 2013-02-16 17:00:37

+0

它帮助,谢谢,但你能解释这一行:isSpace =(isSpace&(ch =='')); ? – 2013-02-16 17:28:15

0

isspace from <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'; 
} 
1
while (*str) { 
    if (*str != ' ' || str[1] != ' ') *newstr++ = *str; 
    str++; 
} 

*newstr = 0; 
+0

请参阅[以前的答案](http://stackoverflow.com/questions/14702877/recursive-form-of-changing-multiple-spaces-to-one-space/14704571#14704571)更多版本 – 2013-02-16 17:22:10

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

末使一个你的字符串的mableced副本。

相关问题