我正在尝试编译一个简单的字符串,但它不起作用...为什么?

时间:2013-12-14 13:42:15

标签: c++ compilation strstr

我的编译器是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命令......

4 个答案:

答案 0 :(得分:1)

'aeiou'不是c / c ++中使用“aeiou”的字符串文字。 在c / c ++中,字符串文字表示在“”(双引号)

Read more here

答案 1 :(得分:0)

所以,显然,这个想法是删除元音。正如其他人所说,使用"aeiou"而非'aeiou'。但您还需要使用正确的功能来检查您是否有元音。那是strchr(const char* s, int c),而不是strstrstrchrc指向的字符串中查找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 

不会访问最后一个字符。