求大神求解答网,用C语言

22:56 提问
C语言,初学者求大神解答
编写一个程序,其功能是将用户输入的一段英文(注意包含空格、逗号、句号及英文字母)分离出单词,并以每个单词出现的次数从高到低输出单词极其次数,次数相同的单词以其对应的字符串大小升序输出
按赞数排序
#define MAX 100
void Getsen(char s[]);
//接受输入句子的函数
void Sepra(char s[],char w[50][20],char time[]);
//分离单词并计数的函数
void sort (char w[50][20]);
//对计数后排序并输出的函数
void main()
char sen[MAX] ;
char word[50][20],time[50];
memset(time,'0',50);
//初始化赋值 全为字符零
memset(word,' ',1000);
//初始化赋值 全为空格
Getsen(sen);
Sepra(sen,word,time);
for(i=0;i&50;i++)
//数组time的建立是便于数据的转移
word[i][0]=time[i];
sort(word);
void Getsen(char s[])
//该函数接受输入语句中的字符
printf("please input the sentence :(非英文将会自动除去)\n");
void Sepra(char s[],char w[50][20],char time[])//该函数用来将字符数组s 中的标点去掉,分离出单词,存放在二维数组w中,数组time与w有联系,用来存放单词出现次数
int i,j,m,n,p,q,sum,flag,mark[MAX] = {0};
for(i = 0;i
if(s[i]&64&&s[i]
s[i] = s[i]+'a'-'A';
if(s[i]&96&&s[i]&123)
mark[i+1] = 1;
mark[i+1] = 0;
mark[0] = 0;
for(i = 0,j = 0,m = 1;i&MAX&&j&50&&m&20;i++)
//mark[i]表示第i+1个字符前面是否为字母;mark[i+1]表示第i+1个字符是否为字母
if(mark[i]==0&&mark[i+1]==1)
//大写字母转换为小写,再进行后续判断
w[j][m++]=s[i];
if(mark[i]==1&&mark[i+1]==1)
w[j][m++]=s[i];
if(mark[i]==1&&mark[i+1]==0)
w[j][m++] = '\0';
//如果第i+1个字符不是字母,且它前面一个是字母,则结束这一个单词,准备开始接受下一个单词 ,并将m重新设置为1
time[j] = '1';
for(n = 0;n&j-1;n++)
//比较新接受的单词是否与前面相同
for(q = 1,sum = 0;q&20;q++)
if(w[n][q]==w[j-1][q])
if(sum==0)
//如果新接受的单词与前面相同,则删除新接受的单词,并重新接受可能是新单词的单词
time[n] = time[n]+1;
time[j] = '0';
for(p = 0;p&20;p++)
w[j][p] = ' ';
void sort (char w[50][20])
int i ,j,n;
char temp[20],c;
for(i=0;i&50;i++)
//排序部分
选择排序法
c=w[i][0];
//c为单词出现次数最大值
for(j=i+1;j&50;j++)
if(c&w[j][0])
c=w[j][0];
if(c!=w[i][0])
for(n=0;n&20;n++)
temp[n]=w[i][n];
for(n=0;n&20;n++)
w[i][n]=w[j][n];
for(n=0;n&20;n++)
w[j][n]=temp[n];
for(i=0;i&50;i++)
//输出部分
if(w[i][0]!='0')
for(j=1;j&20;j++)
if(w[i][j]!=' ')
printf("%-c",w[i][j]);
printf("(%c) ",w[i][0]);
if(i%4==3)
printf("\n");
利用if判断出现频率。比如if (char='a') a++
这个实话说其实可以自己想的,初学者最好自己多琢磨才能进步,这是我的经验之谈
定义string str接收字符串的输入,,
将str通过substr函数进行分离(以空格,逗号,句号分离)并将结果传入一个数组内部,
对接收到的数组进行整合,统计次数;
最后就是排序。
感觉说了也等于没说啊,sorry
#include &iostream&
#include &string.h&
int main()
char str1[200];
//输入的句子
char str2[100][20];
//用二维数组将单词保存
gets_s(str1);
int wnum = 0;
//单词的个数
for (int i = 0;i & strlen(str1);i++)
//从句子的第一个字符开始查找单词
if ((str1[i] == ' ') || (str1[i] == ',') || (str1[i] == '.'))
//如果这不是是单词的开头
//跳到下一个字符
//如果这是单词的开头,则保存到二维数组里,二维数组每一行都代表一个单词。
for (int j = 0; i&strlen(str1);j++)
if (str1[i]&='A' && str1[i] &= 'z')//如果字符不是空格,逗号,句号等,就继续保存字符。
str2[wnum][j] = str1[i];
if(i==strlen(str1))
//如果句子已经结束,则给单词标记结束。
str2[wnum][j+1] = '\0';
str2[wnum][j] = '\0';
//如果字符是空格,逗号,句号和其它非英文字符,给单词标记结束。
//单词保存完毕。
//单词数量+1
//插入排序
char key[20];
for (int i = 1;i &i++)
strcpy(key, str2[i]);
int j = i-1;
while (j & 0 && (strcmp(key, str2[j]) & 0))
strcpy(str2[j + 1], str2[j]);
strcpy(str2[j+1], key);
//统计每个单词出现的次数
int time[100] = { 0 };
time[0] = 1;
for (int i = 1;i &i++)
int k = 0;
while (strcmp(str2[i], str2[i - 1]) == 0)
if (i == wnum)
time[i] = 1;
time[j - 1] +=
//查看结果
for (int i = 0;i &i++)
printf("出现%d次:%s\n",time[i],str2[i]);
i = i + time[i] - 1;
楼主看不懂的地方,可以继续回答。
其他相似问题2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。13:24 提问
代码有问题,求大神解答
#include&stdio.h&
#include&malloc.h&
#include&iostream&
#define MAXSize 10000
}nei[]={{'=',0},{'(',1},{'+',3},{'-',3},{'*',5},{'/',5},{')',6}},
wai[]={{'=',0},{'(',6},{'+',2},{'-',2},{'*',4},{'/',4},{')',1}};
struct sqstack
struct sqstack *
void initstack(struct sqstack* &);
void push(struct sqstack* &,struct sqstack *,struct sqstack *);
void jisuan(struct sqstack *);
int waishu(char );
int main()
struct sqstack *L1,*L,*L2;
initstack(L);
initstack(L1);
initstack(L2);
scanf("%d",&n);
for(i=0;i&n;i++)
L-&next=NULL;
push(L,L1,L2);
jisuan(L);
if(i!=n-1)printf("\n");
void initstack(struct sqstack* &L)
L-&next=NULL;
int neishu(char c)
for(i=0;i&7;i++)
if(nei[i].data==c)
return nei[i].n;
int waishu(char c)
for(i=0;i&7;i++)
if(wai[i].data==c)
return wai[i].n;
void push(struct sqstack* &L,struct sqstack *L1,struct sqstack *L2)
struct sqstack *newnode=NULL,*p=NULL,*q=NULL;
char a[MAXSize];
int i=0,n=0;
newnode-&data='=';
newnode-&next=L1;
if(a[i]!='('&&a[i]!='+'&&a[i]!='-'&&a[i]!='*'&&a[i]!='/'&&a[i]!=')'&&a[i]!='(')
while(a[i]&='0'&&a[i]&='9')
newnode-&data=a[i];
newnode-&next=L2;
newnode-&data='#';
newnode-&next=L2;
if(neishu(L1-&data)&waishu(a[i]))
p-&next=L2;
if(neishu(L1-&data)&waishu(a[i]))
if(a[i]=='\0')
while(L1-&data!='=')
p-&next=L2;
newnode-&data=a[i];
newnode-&next=L1;
if(neishu(L1-&data)==waishu(a[i]))
if(L1-&data=='=')
if(a[i]=='\0')
while(L2-&next!=NULL)
p-&next=L;
void jisuan(struct sqstack *L)
struct sqstack *p;
int i=0,j=0,k=0,m=0,n=0,a[MAXSize];
while(L-&next!=NULL)
switch(L-&data)
a[j-2]=a[j-1]+a[j-2];j--;
a[j-2]=a[j-2]+a[j-1];j--;
a[j-2]=a[j-1]*a[j-2];j--;
a[j-2]=a[j-2]/a[j-1];j--;
if(L-&data!='#')
i=i*10+(L-&data-48);
printf("%d",a[j-1]);
(23+34*45/(5+6+7))
按赞数排序
HEAP: Free Heap block XXXX modified at XXXX after it was freed
就是说已经释放的堆内存被修改了,一般就是new/malloc 后的内存,在被delete/free后又被使用了
其他相似问题求编程大神来解答,用C#语言。。。。跪谢【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:530,052贴子:
求编程大神来解答,用C#语言。。。。跪谢收藏
用if-else嵌套编写程序输入x,y的值。y=(1)x+10 x&0(2)x+5
外语入门 全方位的语言教育经验,专注少儿英语口语在线品牌,注册即送免费试听课.专业英语水平测试,个性化学习方案!
大神们速度来参观哪
速度求解啊,大神们!!!!
这个吧的大神们都去干什么啦!!!!!!!
出门左传 C#吧~
大神说他很忙~所以派我来啦~建议如下:系统如果是xp:按win键,再在英文输入法的状态下长按u键系统如果是win 7: 首先 按下Win键松开。 其次按下→键两次 然后按下↑键 最后按下回车键好~大功告成,这时候你这只需双手合十,诚心祈祷,奇迹自然出现了。哈利路亚,哈利路亚哈利路亚~
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 求解答网站 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信