我想显示文本文件中最长的单词。我的第一个想法是使用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
有人可以帮我理解这个错误吗?
答案 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;