You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中使用指针查找字符串首个元音字符的索引问题

解决查找第一个元音字符索引的问题

我来帮你搞定这个找第一个元音的函数问题~先看看你原代码里的几个关键问题:

  • 循环条件错误:strlen(string)返回的是字符串的有效长度,索引范围是0到length-1,用i <= length会导致访问到字符串末尾的\0,造成越界
  • 没有遍历字符串:你一直判断的是*string(也就是字符串的第一个字符),没有随着循环移动到下一个字符
  • 缺失大写元音判断:只处理了小写的a/e/i/o/u,没考虑大写情况
  • 代码里的元音判断没写完,需要补全所有元音

下面是修正后的完整代码:

#include <string.h>
#include <ctype.h> // 用于toupper函数处理大小写

int firstVowel(char* string){
    // 先判断字符串是否为空或空指针
    if (string == NULL || *string == '\0') {
        return -1;
    }
    
    int length = strlen(string);
    for(int i = 0; i < length; i++){
        char currentChar = toupper(string[i]); // 统一转成大写,减少判断次数
        if(currentChar == 'A' || currentChar == 'E' || 
           currentChar == 'I' || currentChar == 'O' || currentChar == 'U'){
            return i; // 找到元音,直接返回索引
        }
    }
    // 遍历完没找到元音,返回-1
    return -1;
}

代码说明:

  1. 增加空值判断:避免传入空指针或者空字符串时出现异常
  2. 修正循环条件:i < length确保只遍历有效字符,不会越界
  3. 使用toupper统一转大写:这样只需要判断大写元音,代码更简洁,同时支持大小写输入的场景
  4. 找到元音立即返回:不需要继续遍历,提升运行效率
  5. 统一返回-1:确保所有无元音的情况都能正确返回

测试几个场景验证效果:

  • 输入"hello",返回1(第二个字符'e'是元音)
  • 输入"XYZ",返回-1
  • 输入"Apple",返回0(第一个字符'A'是元音)
  • 输入空字符串"",返回-1

内容的提问来源于stack exchange,提问作者Walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:29