2017-08-27 40 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并没有为你管理你的记忆......有史以来......

相关问题