【字符串操作】01.统计一个字符串中单词的个数

/**统计一个字符串中单词的个数
*
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SIZE 100
int func(char* input)
{
	int i;
	int count=0;
	int flag=1;
	int n=strlen(input);
	for(i=0;i<=n;i++)
	{
		//如果是字母
		if((input[i]<='z'&&input[i]>='a')||(input[i]<='Z'&&input[i]>='A'))
			flag=1;
		//如果上一个是字母,并且下一个不是字母,则单词个数加1
		else if(1==flag)
		{
			//if(!(input[i]<='z' && input[i]>='a') || (input[i]<='Z' && input[i]>='A') || input[i+1]=='\0')
			{
				count++;
				flag=0;
			}
		}
	}
	return count;
}
int main(void)
{
	char str[SIZE];
	printf("Please enter a string:");
	gets(str);
	printf("%d\n",func(str));
	system("pause");//如果不加这一句的话,运行exe文件的时候只会一闪而过!!!
	return 0;
	
}

### Java 中统计字符串单词数量的方法 在 Java 中,可以通过多种方法来统计字符串中的单词数量。以下是基于正则表达式的实现方式以及通过 `split` 方法分割字符串的方式。 #### 使用正则表达式统计单词数量 可以利用正则表达式 `[a-zA-Z]+` 来匹配所有的英文单词,并通过 `Pattern` 和 `Matcher` 类来进行处理[^3]: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class WordCounter { public static int countWords(String str) { Pattern pattern = Pattern.compile("[a-zA-Z]+"); // 定义正则表达式匹配单词 Matcher matcher = pattern.matcher(str.toLowerCase()); // 创建匹配器并转换为小写 int wordCount = 0; while (matcher.find()) { // 查找下一个匹配项 wordCount++; // 单词计数增加 } return wordCount; // 返回总单词数 } public static void main(String[] args) { String input = "Hello, my name is John"; System.out.println("Word Count: " + countWords(input)); // 输出单词数量 } } ``` 上述代码会输出: `Word Count: 5` 此方法适用于仅需统计英文字母组成的单词的情况。 --- #### 使用 `split` 方法统计单词数量 另一种常见方法是使用 `String.split()` 函数将字符串按空格或其他分隔符拆分为数组,然后计算数组长度[^4]: ```java public class WordSplitter { public static int countWordsUsingSplit(String str) { if (str == null || str.isEmpty()) { return 0; // 如果字符串为空,则返回 0 } String[] words = str.trim().split("\\s+"); // 去除首尾空白字符后按照任意空白字符分割 return words.length; // 返回分割后的单词数量 } public static void main(String[] args) { String input = "Hello, my name is John"; System.out.println("Word Count using split(): " + countWordsUsingSplit(input)); } } ``` 对于输入 `"Hello, my name is John"`,上述代码同样会输出: `Word Count using split(): 5` 需要注意的是,这种方法假设单词之间由单个或多个空格分隔,并且不会考虑标点符号的影响。 --- #### 结合 `HashMap` 记录每个单词的出现次数 如果不仅需要统计总的单词数量,还需要记录每个单词的具体出现次数,可以借助 `HashMap` 实现[^5]: ```java import java.util.HashMap; import java.util.Map; public class WordFrequencyCounter { public static Map<String, Integer> countWordFrequencies(String str) { String[] words = str.replaceAll("[^a-zA-Z ]", "").toLowerCase().trim().split("\\s+"); Map<String, Integer> frequencyMap = new HashMap<>(); for (String word : words) { if (!word.isEmpty()) { frequencyMap.put(word, frequencyMap.getOrDefault(word, 0) + 1); } } return frequencyMap; } public static void main(String[] args) { String input = "Hello hello world World"; Map<String, Integer> frequencies = countWordFrequencies(input); for (Map.Entry<String, Integer> entry : frequencies.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` 运行结果如下: ``` hello: 2 world: 2 ``` 此处去除了非字母字符并将所有单词转为小写以便统一比较。 --- ### 总结 以上介绍了三种不同的方法用于统计字符串中的单词数量: 1. **正则表达式**适合精确匹配特定模式下的单词。 2. **`split` 方法**简单高效,适于基本场景下快速统计单词数目。 3. **`HashMap` 配合其他工具**可用于更复杂的分析需求,比如统计单词频率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值