2014-08-28 23 views
1

我正在讀取文件中的文本,並確定該字符串是否以#(不包括空格) 開頭,並且如果在#之前沒有其他字符(不包括空格),則將其寫入單獨的文件。
我們應該保留字符串中的空白。 如果在#之前有空白區域,但不會寫入它。我不確定這是否是fgets問題,我不知道或另一個問題 。無法識別循環中的空格爲char?

我相信我的算法是一個有點笨拙

int valid = 1; 

while(fgets(str, 250,f1)!=NULL) 
{ 
    printf("read strings: %s",str);/*my test*/ 

    for(i=0;i<strlen(str);i++) 
    { 
     if(str[i]=='#') 
     { 
      printf("strings: %s",str);/*my test*/ 
      for(j=0;j<i;j++) 
      { 
       if(isspace(str[j])!=0) 
       { 
        valid=0; 
        break; 
       } 
      } 
      break; 
     } 
     else 
     { 
      valid=0; 
     } 
    } 
    if(valid==1) 
    { 
     fprintf(f2, str); 
    } 
    valid=1; 
} 
從文件

所以:

#the cat sat on# the mat 
the sunny day 
    #cats sit on mats 

會寫:

#the cat sat on# the mat 

我下週要考試,試圖得到最好的 可能的理解我可以在短時間內 我已經離開。

+0

我硬編碼我的價值觀張貼清晰度 – 2014-08-28 14:34:36

+0

我不認同這個問題的目標。 「寫它」中的「它」意味着什麼? 「它」是字符「#」還是「它」是指包含「#」的「行」?你是否必須在包含「#」的行中寫出每個字符,還是隻寫出行中「#」右側的那些字符?一行作爲「abcd#hello」會發生什麼?在這種情況下必須輸出什麼?而不包含「#」的行會發生什麼?而像這樣的例子會發生什麼:「12#34#56」? – pablo1977 2014-08-28 14:42:56

+1

除此之外:請不要使用'fprintf':'fprintf(f2,str)',否則如果字符串中有'%'符號,可能會產生一個令人討厭的驚喜。喜歡文字格式的字符串:'fprintf(f2,「%s」,str)' – 2014-08-28 14:45:53

回答

1

如果第一個字符是一個空間,它會進入這個別人:

if(str[i]=='#') 
    { 
     <snip> 
    } 
    else 
    { 
     valid=0; // This line is executed if str[0] is space 
    } 

一個更好的辦法是跳過,直到找到第一個非空格字符,如果它是一個「#」然後打印該行,否則不要打印它。

+0

哦,這是一個明顯的錯誤。我認爲大腦超負荷,錯過了明顯的。謝謝。 – 2014-08-28 14:45:04

0

我以爲我會發布我的答案,因爲我也試驗了isspace。我逆轉了valid的值,並刪除了違規的else

int valid = 0; 

while(fgets(str, 250,f1)!=NULL) 
{ 
    for(i=0;i<strlen(str);i++) 
    { 
     if(str[i]=='#') 
     { 
      valid=1; 
      printf("strings: %s",str);/*my test*/ 
      for(j=0;j<i;j++) 
      { 
       if(isspace(str[j])==0) 
       { 
        valid=0; 
        break; 
       } 
      } 
      break; 
     } 
    } 

    if(valid==1) 
    { 
     printf("saved strings: %s",str); 
     fprintf(f2,"%s", str); 
    } 
    valid=0; 
} 

所以讀文件:

#the cat sat on# the mat 
the sunny day 
    #cats sit on mats 
howdy hoo 
h#hi there all 
#hello jelly beans!# 
#no 

寫入文件F2:

#the cat sat on# the mat 
    #cats sit on mats 
#hello jelly beans!# 
#no 

感謝克拉斯Lindbäck和M Oehm