C ++如何检查字符串数组中元素的大小?

时间:2017-02-11 22:12:48

标签: c++ arrays

我有一个充满随机单词的字符串数组std::string words[4000]。我想检查这个数组中任何随机字的大小。我试过了:

int x = words[rnd].length();

int x = words[rnd].size();

int x = sizeof(words[rnd]);

其中rnd是从rand()返回的数字。但是两次x都得到值0,而sizeof()总是返回28.我在这里做错了什么?

对于想要查看完整代码的任何人:

#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <stdlib.h> 
std::string words[4000];        `
void fread(std::string fname, std::string  words[], const int & nwords)

    {

        std::ifstream ifile(fname.c_str(), std::ios::in);

        if (!ifile)
        {
            std::cout << " Couldn’t read the file " << fname;
            exit(-1);
            //return;
        }

        int count = 0;
        while (ifile && count < nwords)
            ifile >> words[count++];
        ifile.close();
    }

    `int main()`
    `{`

        srand(time(NULL));
        int nwords = 4000;
        int rnd = rand() % nwords;
        int x = words[rnd].length()/3;
        fread("<location>", words, nwords);
        int* hintloc = new int[x];
        std::cout << words[rnd]; //this checks whether i have the right word
        const int hangsize = 19;
        bool chk;
        std::cout << "\n\n\t\t\tGET READY FOR HANGMAN!\n\n\t\tGuess this word: ";
        for (int i = 0; i < x; i++)
        {
            hintloc[i] = rand() % words[rnd].size();
            for (int j = 0; j < i; j++)
            {
                if (hintloc[i] == hintloc[j])
                    i--;
            }
        }

        for (int i = 0; i < words[rnd].size(); i++)
        {
            chk = true;
            for (int j = 0; j < x; j++)
            {
                if (i == hintloc[j])
                {
                    std::cout << words[rnd].at(i)<<" ";
                    chk = false;
                }
            }
            if (chk == true)
                std::cout << "_ ";
        }

        delete[] hintloc;
        system("pause");
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

在使用这些元素之前,您实际上需要初始化words数组,以使元素具有非零长度。如果你不这样做,元素将被默认初始化。默认初始化std::stringlength()size()成员都给出零结果(因为它们做同样的事情)。

如果您正在从文件中读取字符串,并且稍后检查显示它们的长度为零,则该文件包含所有零长度字符串或读取该文件时发生错误。

sizeof(words[rnd])提供sizeof std::string,其大小为std::string类型。这与std::string的任何实际实例(例如words[rnd])所持有的字符串数据的大小无关。(