使用向量的最长的词

时间:2015-04-08 20:42:23

标签: c++

我想显示文本文件中最长的单词。我的第一个想法是使用vector,我尝试了这个:

编辑:检查gha.st的解决方案和解释的答案。

int _tmain(int argc, _TCHAR* argv[])
{
vector <const char*> v;
    char str[100];
    v.clear();


    FILE *file;
    file = fopen("file.txt", "r");
    while (fgets(str, 100, file) != NULL){
        char *s = (char*)malloc(100);
        strcpy(s, str);
        v.push_back(s);
    } fclose(file);


    char* Max_Word(vector<const char*> &v){
          char MaxWord[100];
        vector<const char *>::iterator it;
        for (it = v.begin(); it != v.end(); it++){
            if (strlen(*it)>strlen(MaxWord))strcpy(MaxWord, *it);
        }
        return MaxWord;
    }

    return 0;
}

但是出了点问题,我得到了:Error 1 error C2601: 'Max_Word' : local function definitions are illegal

有人可以帮我理解这个错误吗?

3 个答案:

答案 0 :(得分:1)

您的示例将Max_Word嵌套在另一个函数_tmain中。编译器告诉你嵌套函数在C ++中是非法的。嵌套函数是函数f,其定义在另一个函数的定义中:

int _tmain(int argc, _TCHAR* argv[]) {
    void f(int x) {
        lounge(x);
    }
}

相反,您必须将其置于命名空间级别,或者如果要创建闭包,则使用lambda函数:

void f(int x) {
    lounge(x);
}

int _tmain(int argc, _TCHAR* argv[]) {
    int x = getx();
    auto g = [=]() { lounge(x); };
}

答案 1 :(得分:1)

您需要将函数Max_Word移出_tmain()块

答案 2 :(得分:0)

首先,你将C代码与一些C ++元素混合在一起,这对你想做的事情有点困惑(也许你来自C背景)。无论如何,为了找到文本文件中字符中最长的单词,我建议采用以下解决方案:

std::ifstream in(file.txt);
std::string dataline;
std::map<int,std::string> items;
while (getline(in,dataline)){
    std::istringstream ss(dataline);
    std::string item;
    while (getline(ss,item,' ')){
        items.insert(std::make_pair(item.size(),item));
    }
}
std::string largestWord = items.rbegin()->second;