单词数

单词数

Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 23 Accepted Submission(s) : 9
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input
you are my friend

Sample Output
4

map
#include<bits/stdc++.h>
using namespace std;
string s,str;
map<string,int>q;
int main(){
while(getline(cin,s)){
q.clear();//清空数组;

	if(s[0]=='#'){
		break;
	} 
	int biao=0;
	int len=s.size();
	int sum=0;
	for(int i=0;i<len;i++){
		str.clear();
		while(s[i]>='a'&&s[i]<='z'){
			str+=s[i];
			i++;
			biao=1;
		}
		if(biao){
			q[str]++;
			biao=0;
		}
	}
	sum=q.size();
	cout<<sum<<endl;
}
return 0;

}

hash

#include<bits/stdc++.h>
using namespace std;
int ss[200002];
string a;
int main(){
    while(getline(cin,a)){
        if(a[0]=='#'){
            break;
        }
        memset(ss,0,sizeof(ss));
        int len=a.size();
        int sum1=0;
        long long sum=0;
        ss[0]=1;
        for(int q=0;q<len;q++){
            if(a[q]==' '){
                sum=sum%50021;
                if(ss[sum]==0){
                    ss[sum]=1;
                    sum1++;
                }
                sum=0;
            }
            else{
                sum=sum+a[q]-'0';
            }
        }
        sum=sum%50021;
        if(ss[sum]==0){
            ss[sum]=1;
            sum1++;
        }
        printf("%d\n",sum1);
    }
    return 0;
}
<think>好的,用户想统计文本中的单词量,询问如何在程序中实现。我需要根据他们提供的引用资料,整理出具体的方法步骤。 首先,用户提到了Python和C语言的例子,可能希望得到不同语言的解决方案。但问题本身没有限定语言,所以应该先给出通用的步骤,再分别用不同语言示例说明。 引用1中的Python代码示例展示了统计文件的行、句子单词。不过用户主要关注单词量,可能需要简化代码。通常,英语文本的单词以空格或标点分隔,所以步骤可能包括读取文件、分割单词、统计量。需要注意的是,标点符号的处理可能会影响结果,比如忽略标点或者将其从单词中剔除。 引用2中的C语言代码使用结构体存储单词和计,通过检查是否存在来决定是否新增或增加计。这可能涉及更复杂的单词统计,比如统计每个单词的出现次,但用户的问题只是总,所以可以简化。 引用3提到输入英文语句统计单词量的运行流程,可能包括分割字符串、过滤空字符等步骤。这进一步确认了基本方法:分割字符串成单词组,然后计算长度。 接下来,我需要将这些步骤整理出来,分点说明。首先通用方法,然后Python示例,再C语言示例。需要注意不同语言中的实现差异,比如Python的split()方法可能更简洁,而C需要手动处理字符串。 在Python中,读取文件内容后用split()分割单词,但split()默认以空白字符分割,可能包括多个空格或换行符,需要处理。例如,用户提供的Python代码中使用len(words)来统计单词,但可能需要更严谨的处理,比如去除标点符号。 在C语言中,需要逐个字符读取,判断是否为字母,遇到非字母时结束当前单词,并计。这需要处理连续的非字母字符,比如多个空格或标点。例如,引用2中的代码可能使用状态变量来跟踪是否在单词中,遇到分隔符时增加计。 另外,用户可能希望知道如何处理边缘情况,比如连字符、缩写等。不过根据引用资料,可能不需要涉及这些复杂情况,保持基本的分割即可。 最后,确保代码示例正确,并符合用户提供的引用内容。例如,Python中的split()可能不够精确,但用户提供的例子中使用了类似的方法,所以可以沿用,同时提醒可能的改进点,如使用正则表达式处理更复杂的情况。 总结步骤: 1. 读取文本内容。 2. 分割成单词(按空格或标点)。 3. 统计有效单词量。 然后分别用Python和C语言实现,并说明注意事项,比如标点处理、大小写等。</think>在程序中统计文本单词量的通用步骤如下: ### 一、实现原理 1. **文本预处理**:将文本中的标点符号替换为空格,统一分隔符[^3] 2. **单词分割**:通过空格等分隔符将文本拆分为单词组 3. **有效计**:过滤空字符串和纯字等非单词元素 4. **统计输出**:计算组长度得到单词 ### 二、Python实现 ```python def count_words(text): # 替换标点为空格 for char in '!?.,;:"': text = text.replace(char, ' ') # 分割单词并过滤空值 words = [word for word in text.split() if word.isalpha()] return len(words) # 示例用法 text = "Hello world! This is a test." print(count_words(text)) # 输出 5 ``` ### 三、C语言实现 ```c #include <stdio.h> #include <ctype.h> int count_words(const char* text) { int count = 0; int in_word = 0; while (*text) { if (isalpha(*text)) { if (!in_word) { count++; in_word = 1; } } else { in_word = 0; } text++; } return count; } int main() { char text[] = "Hello world! This is a test."; printf("%d", count_words(text)); // 输出5 return 0; } ``` ### 四、注意事项 1. 处理连字符时需特殊判断(如"state-of-the-art"应视为一个单词) 2. 字与字母混合的字符串是否视为有效单词需根据需求决定 3. 大小写处理:建议统一转为小写后再统计[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值