语句反转问题

n88n 2008-10-22 01:26:54
1.输入:I am a student
输出:student am a I
下面是我写的程序,输出正么会有乱码?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char* converse(char* str);
char hh[100];
gets(hh);
printf("%s",converse(strcat(hh," ")));
getchar();
return 0;
}
char* converse(char* str)
{
int i=0,k=0,j=0,m[100]={0};
char *p[100];
char end[100];
for(i=0;*(str+i)!='\0';i++)
{
m[j]++;
if( str==' ')
{
p[j] = (char*)malloc(m[j]-1);
for(k=0;k<m[j]-1;k++)
{*(p[j]+k) = str[i-m[j]+k+1];}
j++;
}
}
*str = '\0';
for(i=j-1;i>=0;i--){strcat(str,p);strcat(str," ");}
return str;
}
...全文
145 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
n88n 2008-10-24
  • 打赏
  • 举报
回复
多谢各位大侠
sailing0123 2008-10-22
  • 打赏
  • 举报
回复

lz要好好学习,天天向上!
ivan8222 2008-10-22
  • 打赏
  • 举报
回复
一楼的代码中加入一句

for(i=j-1;i>=0;i--)
{
strcat(str,p[i]);
free(p[i]);
strcat(str," ");
}
ivan8222 2008-10-22
  • 打赏
  • 举报
回复
一楼的代码中加入一句

for(i=j-1;i>=0;i--)
{
strcat(str,p[i]);
free(p[i]);
strcat(str," ");
}
  • 打赏
  • 举报
回复
答案已经出来了
ivan8222 2008-10-22
  • 打赏
  • 举报
回复
楼上已经解答了,不过有一点,就是用完了malloc 要free
lbh2001 2008-10-22
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

void converse(char* str)
{
char *p1 = str;
char *p2 = str + strlen(str) - 1; /*p2指向最后一个字符*/
char ch;

while (ch = *str)
{
if (ch == ' ')
*str = '\0';

++str;
}

while (p2 > p1)
{
if (!*p2)
printf("%s ", p2+1);

--p2;
}

printf("%s\n", p2);
}

int main(int argc, char *argv[])
{
char hh[100];
gets(hh); /*gets(hh);---->会将'\n'转为'\0'*/
converse(hh);

return 0;
}
hhyttppd 2008-10-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char* converse(char* str);
char hh[100];
gets(hh);
printf("%s",converse(hh));
getchar();
return 0;
}

void reverse(char* begin, char*end)
{
while(begin <= end)
{
char temp = *end;
*end = *begin;
*begin = temp;

end--;begin++;
}
}

char* converse(char* str)
{
char* begin = str;
char* end = str + strlen(str) - 1;

reverse(begin, end);

for(char* begin = str, *pos = str; pos < end; pos++)
{
if(*pos == ' ')
{
reverse(begin, pos - 1);
begin = pos+1;
}
}

return str;
}
chenqiang35 2008-10-22
  • 打赏
  • 举报
回复
修改如下,主要是指针的移动和申请内存的干净与否问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
char* converse(char* str);
char hh[100];
gets(hh);
printf("%s", converse(strcat(hh," ")));
getchar();
return 0;
}
char* converse(char* str)
{
int i=0,k=0,j=0,m[100]={0};
char *p[100];
char end[100];
printf("str = %s\n", str);
for(i=0;*(str+i)!='\0';i++)
{
m[j]++;
if( *(str+i) == ' ') //*str改成*(str + i),这样指针才有移动,才会有值
{
p[j] = (char *)malloc(m[j]);
memset(p[j], 0, m[j]); //初始化内存,以免申请的内存本来就不是干净的
for(k=0; k < m[j]-1;k++)
{
*(p[j]+k) = str[i-m[j]+k+1];
}
j++;
}
}
//*str = '\0';
memset(str, 0, 100); //清空str

for(i=j-1; i>=0; i--)
{
strcat(str, p[i]);
strcat(str, " ");
}
return str;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧