-1

对于家庭作业项目,我需要从数组中找到一个字符串。现在我一直在努力让这个功能在过去的一个小时里工作,我只是让自己更加困惑。我很确定 find() 返回它找到您的值的地址。我在这里做错了什么!?

下面的代码:

类成员方法:

bool ArrayStorage::stdExists(string word)
{
    if (arrayOfWords != NULL)
    {
        size_t findResult = find(&arrayOfWords[0], &arrayOfWords[arrayLength], word);
        std::cout << "word found at: " << findResult << '\n';
        return true;
    }
return false;
}

(字符串字)来自主要:

string find = "pixel";

声明数组的成员方法:

void ArrayStorage::read(ifstream &fin1)
{
    int index = 0;
    int arrayLength = 0;
    string firstWord;

    if(fin1.is_open())
        {
            fin1 >> firstWord;
            fin1 >> arrayLength;
            setArrayLength(arrayLength);

            arrayOfWords = new string[arrayLength];

            while(!fin1.eof())
            {
                fin1 >> arrayOfWords[index];
                index++;
            }
        }
}

头文件:

class ArrayStorage
{

private:

    string* arrayOfWords;
    int arrayLength;
    int value;

public:

    void read(ifstream &fin1); //reads data from a file
    void write(ofstream &out1); //output data to an output stream(ostream)
    bool exists(string word); //return true or false depending whether or not a given word exists
    bool stdExists(string word); //^^ use either std::count() or std::find() inside here

    //setters
    void setArrayLength(int value);

    //getters
    int getArrayLength();

    ArrayStorage::ArrayStorage() : arrayOfWords(NULL)
    {
    }

    ArrayStorage::~ArrayStorage()
    {
        if (arrayOfWords)
        delete []arrayOfWords;
    }

};
4

2 回答 2

3

g++ 甚至不编译此代码,并带有精确的错误消息:

错误:从 'std::basic_string*' 到 'size_t {aka long unsigned int}' 的无效转换 [-fpermissive]

因此,您需要将代码更改为:

string* findResult = find(&arrayOfWords[0], &arrayOfWords[arrayLength], word);

如果此指针等于 &arrayOfWords[arrayLength],则找不到匹配项。

于 2013-05-17T20:31:34.677 回答
0

find 不返回地址,而是与参数类型相同的迭代器。这是指向存储在 arrayOfWords 中的任何类型的指针。

回应您的评论:如果 arrayOfWords 包含指向字符串的指针,您需要使用 find_if 因为 operator== 无法将指向某物的指针与某物进行比较。

于 2013-05-17T20:11:46.957 回答