2017-08-27 44 views
-5

我正在開發一個項目,需要用一些規則拆分(*char)字符串。他們每7個空格替換一個換行符\n。做那四次。之後,用換行符替換每個第6個空格,然後執行四次。不會被換行符替換的空格

EX:

JD 2D 9H JC 5D 7H 7C 5H KD KC 9S 5S AD QC KH 3H 2S KS 9D QD JS AS AH 3C 4C 5C 10S QH 4H AC 4D 7S 3S 10D 4S 10H 8H 2C JH 7D 6D 8S 8D QS 6C 3D 8C 10C 6S 9C 2H 6H 

完了

JD 2D 9H JC 5D 7H 7C 
5H KD KC 9S 5S AD QC 
KH 3H 2S KS 9D QD JS 
AS AH 3C 4C 5C 10S QH 
4H AC 4D 7S 3S 10D 
4S 10H 8H 2C JH 7D 
6D 8S 8D QS 6C 3D 
8C 10C 6S 9C 2H 6H 

代碼(I縮短它,併除去其他7個文件和爲了簡化代碼的開頭。)

state_t ret; 

    int s,c; 
    char * str; 
    card_t card; 
    char * sta; 
    state_init(&ret); 
    sta = string; 
    str = string; 
    int aoc=0; 
    int ao=0; 
    for(int a=0;(*sta)!='\n'; a++) 
    { 
     if((*sta)!=' ') 
     { 
      sta++; 
      str++; 
     }else 
     { 
      aoc++; 
     } 
     if(aoc==7&&ao<=4) 
     { 

      aoc=0; 
      ao++; 
      *str='\n'; 


     } 
     else if(aoc==6&&ao>=4) 
     { 

      aoc=0; 
      ao++; 
      *str='\n'; 

     } 
     if((*str)=='\n') 
     { 
      break; 
     } 
    } 
    printf(str); 

代碼繼續,但這是錯誤點(我知道,因爲沒有這個代碼和一個預格式化的輸入該代碼每次都有效)。代碼完全沒有做任何事情,沒有實際的錯誤,而且字符串根本沒有改變。

MVCE:

void f(char*s,char*toString) 
{ 
    char c,i=0,j=0; 
    int num=0; 
    while(c=*(s++)) 
     { 

      toString[num]=c; 
      // putchar(c); 
      if(c==' ')++i; 
      if((j<4&&i==7)||(j>=4&&i==6)) 
       { 
        i=0; 
        ++j; 
        toString[num]='\n'; 
        // putchar('\n'); 

       } 
       num++; 
     } 
} 

我一直在這個問題上,不能發現問題。很感謝任何形式的幫助。

爲什麼運行時代碼不會用換行符替換空格?

+3

那麼,你在調試器中的代碼? – OldProgrammer

+0

如果它不編譯,它不是一個MCVE。 –

+0

@OldProgrammer沒有一個。 – Christopher

回答

-1

歡迎來到C!你沒有分配任何內存,所以你錯誤。使用malloc分配內存。我已經使這個代碼適用於你:

void f(char*s,char*toString) 
{ 
    char c,i=0,j=0; 
    int num=0; 
    while(c=*(s++)) 
     { 

      toString[num]=c; 
      // putchar(c); 
      if(c==' ')++i; 
      if((j<4&&i==7)||(j>=4&&i==6)) 
       { 
        i=0; 
        ++j; 
        toString[num]='\n'; 
        // putchar('\n'); 

       } 
       num++; 
     } 
} 

state_t initial_user_state_to_c(char * string) 
{ 
    char * sting; 
    sting = malloc(200); 
    state_t ret; 
    int s,c; 
    char * str; 
    str = string; 
    card_t card; 
    state_init(&ret); 
    f(str,sting); 
    str = sting; 
    for(s=0;s<8;s++) 
    { 
     /* Move to the next stack */ 
     if (s!=0) 
     { 
      while((*str) != '\n') 
      { 
       str++; 
      } 
      str++; 
     } 


     for(c=0;;c++) 
     { 
      /* Move to the next card */ 
      if (c!=0) 
      { 
       while(((*str) != ' ') && ((*str) != '\n')) 
       { 
        str++; 
       } 
       if (*str == '\n') 
       { 
        break; 
       } 
       str++;    
      } 

      card = card_user2perl(str); 
      push_card_into_stack(ret, s, card); 
     }   
    } 

    return ret; 
} 

問題是你從來沒有分配過內存。使用malloc分配內存是C語言必須的。您試圖使用高級語言中的幾種技巧。 C並沒有爲你管理你的記憶......有史以來......

相關問題