没有强制转换错误的Strcmpi整数
strcmpi integer without a cast error
我正在尝试创建一个程序,从字符串中删除元音,将它们添加到向量中,然后给用户再次拥有原始代码的可能性。
在我的代码中,我有这个:
char s[20];
不久之后,我做了这个比较:
for(j=0;j<tam;j++)
{
if(strcmpi(s[j],"a")==1 ||
(strcmpi(s[j],"e")==1 ||
(strcmpi(s[j],"i") ==1||
(strcmpi(s[j],"o") ==1||
(strcmpi(s[j],"u")==1))
{
所以如果数组是char和元音是char("),为什么编译器给我这个错误?:
[警告]传递' strcmpi'的arg 1使指针从整数变为没有强制转换的指针
编辑
有人说正确的是s[j] == 'a',但结果是错误的。如果放车,结果仍然是车。不知道为什么。
if(s[j] == 'a' ||
s[j] == 'A' ||
s[j] == 'e' ||
s[j] == 'E' ||
s[j] == 'i' ||
s[j] == 'I' ||
s[j] == 'o' ||
s[j] == 'O' ||
s[j] == 'u' ||
s[j] == 'U')
{
s[j] = s[j++]; }
Strcmpi
用于比较字符串。strcmpi
的第一个参数是char类型,当它期望char*
时。
为了比较单个字符,s[j]=='e'
是足够的,或者tolower(s[j])=='e'
,如果你需要它是不区分大小写。您需要为tolower
添加ctype.h.
。
strcmpi
的参数必须是字符串,但s[j]
只是单个字符,而不是字符串。您可以使用==
直接比较字符。要获得不区分大小写的比较,请先获取该字符的小写版本并进行比较。
for (j = 0; j < tam; j++) {
char lower = tolower(s[j]);
if (lower == 'a' || lower == 'e' || lower == 'i' || lower == 'o' || lower == 'u') {
...
}
}
您不希望使用strcmp
或其任何变体。因为您想知道字符串是否包含元音,您可能希望使用strstr
使用子字符串搜索。
您使用strcmpi
函数不正确。它的第一个参数类型为const char *
,而您传递的参数类型为char
。也就是说,当你只传递一个字符时,函数需要一个字符串。
而且这个函数不是标准的C/c++函数。所以不应该使用
您可以使用以下方法获得相同的结果
char vowels[] = "aeiou";
//...
if ( strchr( vowels, tolower( s[j] ) )
{
std::cout << s[j] << " is a vowel" << std::endl;
}
您已经被告知strcmpi
不是检查单个字符的正确方法。这是对你的问题的编辑的回答,你问的是实际剥离元音。
如果要保留原始字符串,则需要为不含辅音的字符串提供额外的内存。您还需要两个索引,因为一旦跳过了原始字符串中的一个元音,索引就不同步了。下面是一个示例实现:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char orig[] = "Jackdaws love my big sphinx of quartz.";
char cons[sizeof(orig)]; // Make new char buffer as big
// as the original
int i, j;
j = 0;
for (i = 0; orig[i]; i++) {
if (strchr("AEIOUaeiou", orig[i]) == NULL) {
cons[j++] = orig[i];
}
}
cons[j] = ' '; // Terminate consonant string
printf("was: '%s'n", orig);
printf("is: '%s'n", cons);
return 0;
}
表达式strchr
检查一个字符是否在字符串中。您可以使用它作为在显式比较中拼出所有元音的快捷方式。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 没有强制转换错误的Strcmpi整数