呵呵帮我用C语言实现下面两个问题
1、有一篇文章存储在数组中统计出现的单词并按照出现次数排序
2、将一个存储在数组中的英文句子的单词倒排例如“my name is laolaoliu2002"变成”laolaoliu2002 is name my“不要使用额外的数组存储空间
是一个朋友的问题由于我最近比较忙(要出差)没有时间写了。
问题点数:100、回复次数:10Top
1 楼llf_hust()回复于 2005-04-01 11:19:38 得分 20
2、将一个存储在数组中的英文句子的单词倒排例如“my name is laolaoliu2002"变成”laolaoliu2002 is name my“不要使用额外的数组存储空间
是一个朋友的问题由于我最近比较忙(要出差)没有时间写了。
char *rev(char *src)
{
char *b, *e,ch;
b = src;
strrev(src);
while (*b)
{
while (isspace(*b))
++b;
e = b;
while (*e && !isspace(*e))
++e;
ch = *e,*e = '\0';
strrev(b);
b = e,*e = ch;
}
return src;
}
这是一个算法,主程序自己写一个调用一下就OK了Top
2 楼du51(郁郁思扬)回复于 2005-04-01 11:39:39 得分 30
#include<iostream>
using namespace std;
char* change(char *str)
{
char *p=str,*q=str,*str1,*q1;
int len=strlen(str)-1;
str1=new char[len+2];
//if(!str1)cout<<"ERROR!"<<endl;
while(*p)
{
if(*p!=' ')
{
if(*q==' '||*q==0)
{
q1=q;
do
{
str1[len]=*(--q);
len--;
}while(p!=q);
p=q=q1;
}
else q++;
}
else
{
str1[len]=' ';len--;p++;q++;
}
}
str1[strlen(str)]=*p;
return str1;
}
int main()
{
cout<<"请输入你要转换的字符串!"<<endl;
char str[80];
cin.getline(str,80);
cout<<change(str)<<endl;
system("PAUSE");
return 0;
}Top
3 楼laolaoliu2002(老刘----狂热的热爱人民币)回复于 2005-04-01 11:52:54 得分 0
llf_hust() 老兄写程序实现不了Top
4 楼xuelong_zl(点雨点[我身上咋就没MM的香水味涅??#-_-])回复于 2005-04-01 12:44:58 得分 10
第二题的搞笑版
#include "stdio.h"
int main(void)
{
char* word[4]={"my", "name", "is", "laolaoliu2002"};
char** p;
int i;
p = &word[3];
for (i=0;i<4;i++)
printf ("%s ",p[-i]);
}Top
5 楼xuelong_zl(点雨点[我身上咋就没MM的香水味涅??#-_-])回复于 2005-04-01 12:47:08 得分 0
可以定为灌水程序Top
6 楼bingsejian(抽不死你丫的~)回复于 2005-04-01 14:50:31 得分 10
汗~~~
~~~~你用了最简单的方法实现了~~~~牛~~~
拉出去 抽100次 以表示奖励~~~Top
7 楼xuelong_zl(点雨点[我身上咋就没MM的香水味涅??#-_-])回复于 2005-04-01 14:58:17 得分 0
我的方法不是最简单的,如果最简单可以直接输出的,嘿嘿
不过我的程序也可以改为任意输入的^_^Top
8 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-01 15:30:14 得分 0
markTop
9 楼du51(郁郁思扬)回复于 2005-04-01 16:47:07 得分 30
1、有一篇文章存储在数组中统计出现的单词并按照出现次数排序
----------------------------------------------------------
#include<iostream>
using namespace std;
struct node{
char *s;
int num;
node *next;
};
node* orderInsertnode(node *&head,node *p) //排序
{
node *p1,*p2;
if(!head) //建头
{
head=p;
p->next=0;
return head;
}
if(head->num>=p->num) //插入头之前
{
p->next=head;
head=p;
return head;
}
p1=p2=head;
while(p2->next&&p2->num<=p->num)
{
p1=p2;p2=p2->next;
}
if(p2->num<=p->num) //插入中间
{
p2->next=p;
p->next=0;
}
else //插入尾.
{
p->next=p2;
p1->next=p;
}
return head;
}
node *Insertnode(node *&head,node *p) //构建链表
{
node *q,*q1;
if(!head) //建头
{
head=p;
p->next=0;
p->num=1;
return head;
}
q1=q=head;
while(q) //处理中间情况
{
if(strcmp(q->s,p->s))
{
q1=q;q=q->next;
}
else
{
q->num+=1;
return head;
}
}
if(!q)q1->next=p; //插入尾部
return head;
}
node *filespik(char *file)
{
char *p=file,*q=p,*q1,e;
node *head=0,*head1=0,*word;
while(*p)
{
while(!isalpha(*p))++p; //指向单词开始处
q1=p;
while(isalpha(*q1)&&*q1)++q1; //指向单词尾处
e=*q1; //留COPY
*q1='\0'; //置结尾符
word=new node;
word->s=new char[strlen(p)+1];
strcpy(word->s,p); //放入单词
word->num=1;
word->next=0;
head=Insertnode(head,word); //插成无序表
word=0;p=q1; *p=e;
} //完成循环后所有单词被无序插入head中.
node *hh=head;
while(hh)
{
word=new node;
word->s=new char[strlen(hh->s)+1];
strcpy(word->s,hh->s);
word->num=hh->num;
word->next=0;
head1=orderInsertnode(head1,word);
hh=hh->next;
} //完成排序
while(head) //回收空间
{
hh=head;
head=hh->next;
delete hh->s;
delete hh;
}
return head1;
}
int main()
{
char test[]="aa aa bb bb bb bb test i love you but do you love me? so big disgrace! good luck";
node *result=filespik(test);
node *p=result;
while(p)
{
cout<<p->s<<" "<<p->num<<endl;
p=p->next;
}
while(result)
{
p=result;
result=result->next;
delete p->s;
delete p;
}
system("PAUSE");
return 0;
}Top
10 楼llf_hust()回复于 2005-04-01 17:31:29 得分 0
llf_hust() 老兄写程序实现不了
不会吧,你自己写个主程序呀Top




