1

我是编程初学者。我目前的大学作业告诉我从文件中读取文本并且只获取“有效”单词, end而不是end.. 我陷入了必须将新检测到的单词放入单词数组中的部分。

编译器错误是:数组必须用大括号括起来的初始化程序初始化

int const MAX_WORDS = 100000;
int const MAX_WORDLENGTH = 80;
typedef char Word [MAX_WORDLENGTH];
typedef Word Words [MAX_WORDS];
Words words ;

bool read_file (char filename [80])
{
    ifstream file(filename);
    if(!file) {
        cout << "wrong filename";
        return false;
    }
    char c;
    int word_idx = 0;
    Word word = words[word_idx++];
    int letter_idx = 0;
    int connector_count = 0;
    while (file.get(c)) {
     if ((c>='A' && c<='Z')||(c>='a' && c<='z'))
     {
         word[letter_idx++] = c;
         cout << c << endl;
     }
     else {
        if (c == '-') {
            if(connector_count==0) {
                word[letter_idx++] = c;
                connector_count++;
            }
            else {
                if(connector_count==1) {
                    word[letter_idx-1] ='\n';
                    Word word = words[word_idx++];


                }
            }
        }
     }
    }
4

1 回答 1

0

这是导致错误的行(您有两个):

单词单词 = 单词[word_idx++];

通过赋值进行数组初始化在 C++ 中是非法的,例如,如果你有这样的事情:

typedef char string[5];
string str = "hello";

你尝试做这样的事情:

string str2 = str;

你会得到和你一样的错误。你处理这个问题的方式是包括

#include <string.h>并这样做:

memcpy(str2, str, sizeof(string));

所以在你的情况下Word word = words[word_idx++];,你应该这样做:

Word word;  //declare variable
memcpy(word, words[word_idx++], sizeof(Word)); //copy to variable

当然,如果您想避免以后的麻烦,请使用std::string.

希望这可以帮助。

于 2013-11-07T22:24:34.137 回答