我有一个充满随机单词的字符串数组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;
}
答案 0 :(得分:0)
在使用这些元素之前,您实际上需要初始化words
数组,以使元素具有非零长度。如果你不这样做,元素将被默认初始化。默认初始化std::string
将length()
和size()
成员都给出零结果(因为它们做同样的事情)。
如果您正在从文件中读取字符串,并且稍后检查显示它们的长度为零,则该文件包含所有零长度字符串或读取该文件时发生错误。
sizeof(words[rnd])
提供sizeof std::string
,其大小为std::string
类型。这与std::string
的任何实际实例(例如words[rnd]
)所持有的字符串数据的大小无关。(