2013-02-16 70 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副本。

相關問題