我正在开发一个项目,需要使用一些规则拆分(*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
代码(为了简单起见,我将其缩短并删除了其他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);
代码继续,但这是错误点(我知道,因为没有代码和预先格式化的输入,代码每次都有效)。代码根本不做任何事情,没有实际错误,字符串根本没有改变。
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++;
}
}
我一直在研究这个问题但找不到问题。非常感谢任何帮助。
为什么运行时代码不会用换行符替换空格?
答案 0 :(得分:-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;
}
问题是你根本没有分配内存。在C中使用malloc来分配内存是必须的。您尝试使用更高级语言中的几个技巧。 C不会为你管理你的记忆......永远......