私はランダムな単語でいっぱいの文字列配列std::string words[4000]
を持っています。私はこの配列内のランダムな単語のサイズを確認したい。私が試した:RNDはランド(から返された番号であるC++文字列配列内の要素のサイズをチェックする方法は?
int x = words[rnd].length();
と
int x = words[rnd].size();
と
int x = sizeof(words[rnd]);
)を。しかし、両方の時間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;
}
'rnd'が0..3999の範囲内にあることを確認しましたか? – gurka
また、 'sizeof(std :: string)'は文字列の長さを与えません。 'string'クラス/ structのサイズをバイト単位で返します。 – gurka
どのように 'words'を初期化していますか? –