我的编译器是Code :: Blocks。我正试图从字符序列中消除人声。
#include <iostream>
#include <cstring>
using namespace std;
char sir[256];
int i=0;
int main (){
cout<<"sir=";cin.getline(sir,256);
for (i=strlen(sir);i>0;i--){
if (strstr(sir[i],'aeiou')==0){
strcpy(sir+i,sir+i+1);
break;}}
cout<<"sir="<<sir<<"\n";
return 0;
}
我收到以下错误:
error: call of overloaded 'strstr(char&, int)' is ambiguous
note: candidates are:
note: char* strstr(char*, cost char*) near match
但我认为问题出在strstr命令......
答案 0 :(得分:1)
'aeiou'不是c / c ++中使用“aeiou”的字符串文字。 在c / c ++中,字符串文字表示在“”(双引号)
中答案 1 :(得分:0)
所以,显然,这个想法是删除元音。正如其他人所说,使用"aeiou"
而非'aeiou'
。但您还需要使用正确的功能来检查您是否有元音。那是strchr(const char* s, int c)
,而不是strstr
。 strchr
在c
指向的字符串中查找s
的出现,并返回指向该出现的指针,如果未找到,则返回指向终止nil字符的指针。所以原始代码中的测试应该是:
if (*strchr("aeiou", sir[i] != '\0')
就个人而言,我会更简洁地写一下:
if (*strchr("aeiou", sir[i]))
答案 2 :(得分:0)
正如我在第一篇评论中写的那样,表达式
strstr(sir[i],'aeiou')
错误有两个原因:'是单个字符,'是字符串,但主要原因是,strstr发现整个事物的发生,而不是单独的字符。
试试这个:
#include <iostream>
#include <cstring>
using namespace std;
char sir[256];
char sir2[256];
int i=0;
int main (){
cout<<"sir=";cin.getline(sir,256);
char* reader = sir;
char* writer = sir2;
while(*reader) {
if(*reader!='a' && *reader!='e' && *reader!='i' && *reader!='o' && *reader!='u') {
*writer = *reader;
++writer;
}
++reader;
}
*writer = '\0';
cout<<"sir="<<sir2<<"\n";
return 0;
}
答案 3 :(得分:0)
ststr由两个函数原型
定义const char* strstr( const char* str, const char* target );
char* strstr( char* str, const char* target );
您的通话正在呼叫
strstr(sir[i],'aeiou')
第一个arg是char类型,而不是char *类型,因此编译器确实知道如何将其映射到const char *或char *
同时检查循环索引为
i=strlen(sir)
会过度索引char数组并
i > 0
不会访问最后一个字符。