C++编译报invalid conversion from 'const char*' to 'int'错误求助
问题排查
1 编译报错原因
你遇到的invalid conversion from 'const char*' to 'int'报错由strchr函数的参数使用错误导致:
- 标准库
strchr的函数原型为char* strchr(const char* str, int c),第二个参数要求传入单个待查找的字符,你代码中传入了字符串常量"aeiou"(类型为const char*),编译器尝试将指针转换为int类型匹配参数要求,因此抛出类型转换错误。
2 其他逻辑错误
- for循环条件书写错误:代码中
i=0是赋值操作,会直接将i赋值为0且循环条件直接为假,循环完全不会执行,正确的倒序遍历边界条件应为i >= 0 - 元音判断逻辑错误:你需要判断当前遍历到的字符
s[i]是否为元音,正确写法为strchr("aeiou", s[i]) == NULL,该表达式为真时说明s[i]不是元音,属于待删除的辅音 - 删除字符逻辑错误:删除下标为
i的字符,需要将i+1位置开始的字符串复制到i位置,正确写法为strcpy(s + i, s + i + 1) - 缺少跳出循环逻辑:找到最后一个辅音并删除后需要立即终止循环,否则会继续向前遍历删除前面的辅音,不符合需求
修正后代码
#include <iostream> #include <cstring> using namespace std; int main() { char s[256]; int i; cin.get(s, 256); for(i = strlen(s) - 1; i >= 0; i--) { // 如需适配带末尾空格的输入场景,可取消下一行注释,需额外引入<cctype>头文件 // if (!isalpha(s[i])) continue; // 判断当前字符为辅音 if (strchr("aeiou", s[i]) == NULL) { strcpy(s + i, s + i + 1); break; } } cout << s; return 0; }
测试输入mare frig saci时,输出为mare frig sai,符合预期。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

