我尝试使用C数组来编写下面的代码
当我输入=> I am a boy.
时
期望的输出是=> boy a am I.
这是我的代码,它不起作用。
我发现了2天的错误,我仍然找不到问题
int i,j,k,m,start,temp_end,len;
char str[30];
gets(str);
len=strlen(str);
temp_end=len-1;
for(k=len;k>0;k--)
{
if(str[k]==" ")
start=k;
for(j=start+1;j<temp_end;j++)
{
printf("%c",str[j]);
}
printf(" ");
temp_end=k;
}
for(m=0;m<temp_end;m++)
{
printf("%2c.",str[m]);
}
答案 0 :(得分:1)
正如其他人指出的那样,您的代码存在多个问题。
在条件if(str[k]==" ")
中,您使用" "
来表示单个空格字符,这是不正确的。对于单个空格字符,您需要使用' '
。 " "
是string
,只有一个空格字符。
您每次都在运行for(j=start+1;j<temp_end;j++) { … }
循环。但是,只有在找到新空间' '
时才应运行此选项。你可以使用一个标志。与printf(" ");
和temp_end = k;
printf("%2c.", str[m])
看起来像是一个错字。为什么%2c.
?你应该只做"%c"
。
/* Use a flag to know when to print */
/* 0 means don't print, 1 means print */
int pflag = 0;
for(k = len-1; k >0; k--)
{
if(str[k]==' ') {
pflag = 1; /* new space found, update the flag to print */
start=k;
}
if (pflag == 1) /* check flag to see if print needed */
{
for(j=start+1;j<temp_end;j++)
{
printf("%c",str[j]);
}
printf(" ");
temp_end=k;
pflag = 0; /* reset flag after printing */
}
}
for(m=0;m<temp_end;m++)
{
printf("%c",str[m]);
}
另外,请勿使用gets()
。使用fgets()
或其他内容。