一个文本中,如何求得所有不同单词出现的次数,求算法

kankanbiao 2008-11-19 03:32:14
如:this is a dog!it is black.
则输出:this= 1,is=2等
希望算法详细点
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
就呆在云上 2008-11-19
  • 打赏
  • 举报
回复
我给一个很详细的:
#include <stdio.h>  

int length(char *str) {
int leng = 0;
while (*str++)
leng++;
return leng;
}

void rev_str_by_one(char *str) {
int a = length(str);
int t = a;
int temp;
//从尾巴到头一个个的字母逆序,一直进行到(t+1)/2这个地方即可。
for (int i = 0; i < (t+1)/2; i++, a--) {
temp = str[i];
str[i] = str[a-1];
str[a-1] = temp;
}

}

void RevStr(char src[]) {
//开始的时候把src赋地址给start和end以及一个指针p,他们都指向首地址!
char *start=src, *end=src, *p=src,e;
int i=0;
do
{
//相当于一个个单词进行逆序,然后整体逆序一次就是所需结果!
//首先把p移到特殊的“字母”之上,然后end放到单词最后的一个正常“字母”之上,然后执行一次单词的逆序。
if(*p==' ' || *p==',' || *p=='.' || *p==';' || *p=='!' || !*p)
{
i=1,end=p-1;
while(start < end)
e= *start, *start++ = *end, *end-- = e;
}
//在执行一个单词之后,start跳到下一个单词的首地址上去,
if(i)
start=p+1, i=0;
}while(*p++);

while(src < end)
e= *src, *src++ = *end, *end-- = e;

}

int main() {
char s[]="this is a dog!it is black. ";
RevStr(s);
printf("%s\n",s);
return 0;
}

lann64 2008-11-19
  • 打赏
  • 举报
回复
map是最佳解法。
一定要自己做,可以试试先用hash,然后用list逐一比较。
weidong0210 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sforiz 的回复:]
定义一个字符串,if(字符串1==this){
a+=1;

}else if(字符串2==is){
b+=1;
}else 同理、、、、、、、
、、、、
最后输出
printf("",a);//this=1
printf("",b);
[/Quote]
大哥 题目看清楚了在说
你怎么知道字符串中的单词
先up
sforiz 2008-11-19
  • 打赏
  • 举报
回复
定义一个字符串,if(字符串1==this){
a+=1;

}else if(字符串2==is){
b+=1;
}else 同理、、、、、、、
、、、、
最后输出
printf("",a);//this=1
printf("",b);
Rain208 2008-11-19
  • 打赏
  • 举报
回复
RegExp
太乙 2008-11-19
  • 打赏
  • 举报
回复
这要啥算法?用map不就完了么?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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