第十三周OJ项目统计元音字母个数

本周项目是在在线判题系统(OJ)上实现一个程序,统计输入字符串中元音字母的数量。通过这个实战,提升编程能力和字符串处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
  *Copyright (c)2014,烟台大学计算机学院
  *All gight reserved.
  *文件名称:temp.cpp
  *作者:曾晓
  *完成时间:2014年11月17日
  *版本号:v1.0
  */

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    char ch[100];
    int i=0,n1=0,n2=0,n3=0,n4=0,n5=0;
    gets(ch);
    while (ch[i]!='\0')
    {
        if (ch[i]=='a')
        n1++;
        else if (ch[i]=='e')
        n2++;
        else if (ch[i]=='i')
        n3++;
        else if (ch[i]=='o')
        n4++;
        else if(ch[i]=='u')
        n5++;
        i++;
    }
    cout<<"a:"<<n1<<endl;
    cout<<"e:"<<n2<<endl;
    cout<<"i:"<<n3<<endl;
    cout<<"o:"<<n4<<endl;
    cout<<"u:"<<n5<<endl;

    return 0;
}


运行结果:

### OJ 1094 元音统计问题的函数实现与解题思路 #### 解题背景 OJ 平台上的第 1094 号问题是关于元音统计的任务。该问题的核心目标是从输入字符串中提取并计算元音的数量,其中元音定义为 `a`, `e`, `i`, `o`, `u`(不区分大小写)。由于涉及大量数据处理的可能性,需采用高效算法完成此任务。 --- #### 数据预处理与核心逻辑分析 为了满足题目要求,在解决过程中可考虑以下几点: 1. **元音集合初始化** 定义一个包含所有元音字符的小写字母集合作为参照表,便于后续匹配操作[^2]。 2. **遍历字符串** 对于每一个字符,判断其是否属于元音集合。如果属于,则增加计数器;否则跳过当前字符继续下一轮循环[^3]。 3. **忽略大小写差异** 将整个字符串统一转换成小写形式后再执行比较动作,从而简化条件判定过程[^4]。 4. **边界情况考量** 特殊情况下如空串或者完全由辅音构成的情况也需要被妥善处理以免程序崩溃或得出错误结论。 --- #### Python 实现方案 以下是基于上述策略编写的Python版本解决方案: ```python def count_vowels(input_string): vowels_set = {'a', 'e', 'i', 'o', 'u'} # 创建元音集合 [^2] input_lower = input_string.lower() # 转化为小写以便统一对待 [^4] total_count = sum(1 for char in input_lower if char in vowels_set) # 利用列表推导式快速求和 [^3] return total_count # 测试样例部分 if __name__ == "__main__": test_cases = ["hello", "world", "", "aeiouAEIOU"] results = {case: count_vowels(case) for case in test_cases} print(results) ``` --- #### Java 实现方案 对于偏好静态类型的开发者来说,这里也提供了一个简洁明了的Java版解答方法: ```java public class VowelCounter { public static int countVowels(String s){ Set<Character> vowelSet = new HashSet<>(Arrays.asList('a','e','i','o','u')); // 初始化元音哈希集合 [^2] String lowerStr = s.toLowerCase(); // 字符串转小写 int counter=0; for(char c : lowerStr.toCharArray()){ if(vowelSet.contains(c)) ++counter; // 若存在则累加计数值 [^3] } return counter; } public static void main(String[] args){ List<String> tests = Arrays.asList("hello","world","","aeiouAEIOU"); Map<String,Integer> resultMap=new HashMap<>(); for(var str:tests){ resultMap.put(str,countVowels(str)); } System.out.println(resultMap); } } ``` --- #### C++ 实现方案 最后附上一份针对C++用户的参考代码片段: ```cpp #include <iostream> #include <unordered_set> using namespace std; int countVowels(const string& s){ unordered_set<char> vowels{'a','e','i','o','u'}; // 使用无序集合存储元音字符 [^2] int cnt=0; for(auto ch:s){ // 遍历每个字符 [^3] if(isalpha(ch)){ char lc_ch=tolower(ch); // 处理大小写一致性 [^4] if(vowels.find(lc_ch)!=vowels.end()) ++cnt; } } return cnt; } // 主测试入口 int main(){ vector<string> samples{"hello","world","", "aeiouAEIOU"}; for(auto &sample:samples){ cout<< sample << ": "<<countVowels(sample)<<endl; } return 0; } ``` --- #### 时间复杂度评估 以上三种语言所展示出来的算法均具备线性时间复杂度 \(O(n)\),这是因为它们都仅仅单次扫描了一遍完整的输入序列,并且内部的操作皆属常量级运算[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值