字符串统计排序 (哪位大虾帮帮我吧,今天是最后一天了,哪怕把核心的代码写出来也行)

aabcdezz 2010-06-22 10:02:50
【问题描述】编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
【输入形式】用户在第一行输入一个字符串,以回车结束输入。
【输出形式】程序统计字符串中出现的所有字符,然后按照字符出现频率大小排序输出,频率相同时,按输入顺序输出。输出形式规定为每行输出4个字符数据,输出格式为:字符-出现次数。每个字符-出现次数输出中间用一个空格分隔,每行末尾没有空格。程序输出结尾有一个回车。
【样例输入】
The job requires an agile mind.
【样例输出】
#-5 e-4 i-3 r-2
a-2 n-2 T-1 h-1
j-1 o-1 b-1 q-1
u-1 s-1 g-1 l-1
m-1 d-1 .-1 #表示空格(在程序请输出空格,而不是字符’#’,这里只是表示而已。)
【样例说明】用户首先输入字符串The job requires an agile mind. 程序统计完毕之后按照每行4个统计结果输出,字符串中有5个空格,所以输出为#-5,#表示空格。字符’b’和’T’出现次数同为1,因为输入时’b’先于’T’输入,所以输出时也先打印’b’的统计信息。
...全文
1097 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aabcdezz 2010-06-23
  • 打赏
  • 举报
回复
你们都写的不错,我收益匪浅,我只有100分,只能平分给你们了,谢谢你们了
XiongYouXiaoZhi 2010-06-23
  • 打赏
  • 举报
回复
都说完了。。楼主该结贴了。。呵呵
cattycat 2010-06-23
  • 打赏
  • 举报
回复
输入:The job requires an agile mind.
输出
-5 e-4 i-3 r-2
a-2 n-2 T-1 h-1
j-1 o-1 b-1 q-1
u-1 s-1 g-1 l-1
m-1 d-1 .-1
cattycat 2010-06-23
  • 打赏
  • 举报
回复 1
给你用c语言写的,可以运行。注意结贴。

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

typedef struct
{
char c;
int count;
}Letter;

void swap(Letter* x,Letter* y)
{
Letter t;
t.c=x->c;
t.count=x->count;
x->c=y->c;
x->count=y->count;
y->c=t.c;
y->count=t.count;
}
void sort(Letter* L,int k)
{
//冒泡排序
int i,j;
for(i=0;i<k-1;i++)
for(j=0;j<k-i-1;j++)
{
if(L[j].count<L[j+1].count)
swap(&L[j],&L[j+1]);
}
}
int main()
{
char buf[100];
Letter L[100];

int i,j,k=0;
memset(L,0,sizeof(L));

gets(buf);

for(i=0;i<strlen(buf);i++)
{
for(j=0;j<k;j++)
{
if(L[j].c==buf[i])
{
L[j].count++;
break;
}
}
if(j==k)
{
L[k].c=buf[i];
L[k].count=1;
k++;
}
}
sort(L,k);
for(i=0;i<k;i++)
{
printf("%c-%d ",L[i].c,L[i].count);
if((i+1)%4==0)printf("\n");
}
printf("\n");
}
xiaozhiwei 2010-06-23
  • 打赏
  • 举报
回复
注意结贴
xiaozhiwei 2010-06-23
  • 打赏
  • 举报
回复

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

#define MAX_INPUT_NUM 100

typedef struct Node
{
char ch;
int count;
Node *next;

}CHAR_COUNT;

void GetCharCount(char *pStr, char ch, int *count)
{
char *ptr;
int num = 0;

ptr = strchr(pStr, ch);
while (ptr != NULL)
{
num++;
*ptr = -1;
ptr = strchr(ptr + 1, ch);
}

*count = num;
}

void Insert(CHAR_COUNT *head, char ch, int count)
{
CHAR_COUNT *pCC, *pTmp;

pCC = (CHAR_COUNT*)malloc(sizeof(CHAR_COUNT));
pCC->ch = ch;
pCC->count = count;
pCC->next = NULL;

if (head->next == NULL)
{
head->next = pCC;
}
else
{
pTmp = head;
while (pTmp->next != NULL)
{
if (pTmp->next->count >= count)
{
pTmp = pTmp->next;
continue;
}

pCC->next = pTmp->next;
pTmp->next = pCC;
return;
}

pTmp->next = pCC; // 插入到末尾
}
}

void Print(CHAR_COUNT *head)
{
CHAR_COUNT *pTmp;
int count = 0;

pTmp = head->next;
while (pTmp != NULL)
{
count++;
printf("%c-%d ", pTmp->ch, pTmp->count);
if (count % 4 == 0)
printf("\n");

pTmp = pTmp->next;
}

printf("\n");
}

void main()
{
char szInput[MAX_INPUT_NUM];
char ch;
int count;
CHAR_COUNT head;
int i;

head.next = NULL;

printf("输入字符串:\n");
gets(szInput);

for (i = 0; i < MAX_INPUT_NUM; i++)
{
ch = szInput[i];
if (ch == '\0')
break;

if (ch == -1)
continue;

GetCharCount(szInput, ch, &count);
Insert(&head, ch, count);
}

Print(&head);


system("pause");
}
aabcdezz 2010-06-23
  • 打赏
  • 举报
回复
哪位大虾帮帮我吧

70,005

社区成员

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

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