字符以单词为单位排序问题??

cxy343601061 2009-08-22 11:16:41


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *c, *p,*str;
p = (char*)malloc(20*sizeof(char *));
str=(char*)malloc(20*sizeof(char *));
int l,j,i=0,num=0;
int count =1;
c=p;
gets(p);
for(;*p!='\0';p++)
count++;
p=p-1;
while(p>=c)
{
j=num;
if(*p!=' ')
num++;
else
{
for(i=1;i<=j;i++,num--)
str[j-num]=p[i];
*(str+j)=*p;


}

p--;
str++;

}
for(i=1;i<=num;i++)
{ str++;

str[-num]=p[i];}
str[num]='\0';

printf("%s",str);
}
各位帮我看看,最后一个赋值的循环怎么都弄不出来,貌似指针指向还是什么错误,打印不出东西!!
正确效果是。。 输入 hello world
输出 world hello

...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mr_leo17895 2009-08-22
  • 打赏
  • 举报
回复
之前遇到空格拷贝时初始地址即str值不对,它的地址应该是上一次拷贝字符串后的尾地址(str += j+1)而不是str++
cxy343601061 2009-08-22
  • 打赏
  • 举报
回复
(mr_leo17895)
能解释下么。。。。看的不是很明白!!谢谢。。嘿嘿
cxy343601061 2009-08-22
  • 打赏
  • 举报
回复
to eijikayn
c++的还不清楚!!!才看书到一半。感觉很难理解!!
mr_leo17895 2009-08-22
  • 打赏
  • 举报
回复
楼主按照下面代码改一下,应该可以了

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *c, *p,*str;
p = (char*)malloc(20*sizeof(char *));
str=(char*)malloc(20*sizeof(char *));
char *ss = str;
int l,j,i=0,num=0;
int count =1;
c=p;
gets(p);
for(;*p!='\0';p++)
count++;
p=p-1;
while(p>=c)
{
j=num;
if(*p!=' ')
num++;
else
{
for(i=1;i <=j;i++,num--)
str[j-num]=p[i];
*(str+j)=*p;

str += j+1;

}

p--;
// str++;

}
for(i=1;i <=num;i++)
{
*str++ = p[i];
}
*str='\0';

printf("%s",ss);

return 0;
}
eijikayn 2009-08-22
  • 打赏
  • 举报
回复
p=c;
c=strtok(p," ");
tmp = strtok(NULL," ");
printf("[%s][%s]\n",c,tmp);
strcpy(str,tmp);
strcat(str," ");
strcat(str,c);
printf("a :%s \n",str);
eijikayn 2009-08-22
  • 打赏
  • 举报
回复
申请空间没什么问题,指针也有大小,(char *)大小是4而已
我觉得lz写的太复杂了,直接用strtok简单多了
[code ]
c=strtok(p," ");
tmp = strtok(NULL," ");
printf("[%s][%s]\n",c,tmp);
strcpy(str,tmp);
strcat(str," ");
strcat(str,c);
[/code]
KevinHo 2009-08-22
  • 打赏
  • 举报
回复
你的意思是不是按照字典序,把一个英文句子里的各个单词进行排序?
KevinHo 2009-08-22
  • 打赏
  • 举报
回复
LZ,这句错了:
p = (char*)malloc(20*sizeof(char *)); 
str=(char*)malloc(20*sizeof(char *));

应该这样:
p = (char*)malloc(20*sizeof(char)); 
cxy343601061 2009-08-22
  • 打赏
  • 举报
回复
(mr_leo17895):
谢谢。。明白了!!!

69,371

社区成员

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

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