在c ++中一次输入一行到字符串数组中

时间:2015-12-02 01:06:01

标签: c++ arrays string file

这里是编程和Stackoverflow的新手。刚刚有一个关于编写类刽子手程序的一部分的问题。

为了尽早启动它,我必须手动硬编码答案并将其设置为随机选择一个,如下所示:

srand(time(NULL));
string Phrases[3] = {"evan almighty","the hunger games","click"};
string SecretWord = Phrases[rand()%3];

我正在尝试使用txt文件作为修改答案列表的简单方法,而不是使我的主代码混乱(根据我的教授的建议)。

所以,我被建议使用getline和循环:

string Phrases[10];
ifstream fin("hangman.txt");
for (int x=0; x<10; x++)
{
    getline (fin, Phrases[x]);
}
string SecretWord = Phrases[rand()%10]

它工作正常,但我想知道是否有办法避免硬编码答案/短语的总数。

这一切都在CodeBlocks中完成,使用int main(),并返回0,仅用于上下文。

谢谢!

2 个答案:

答案 0 :(得分:1)

动态内存分配

让我们假设我们的数组是int array[3]
您说您希望操作系统的内存大小为3*sizeof(int)您可以在运行时确定阵列的大小。
在此示例中,您将在编译时确定数组大小:

#include <iostream>
#include <new>
using namespace std;

int main ()
{
  int i,n;
  int * p;
  cout << "How many numbers would you like to type? ";
  cin >> i;
  p= new (nothrow) int[i];
  if (p == nullptr)
    cout << "Error: memory could not be allocated";
  else
  {
    for (n=0; n<i; n++)
    {
      cout << "Enter number: ";
      cin >> p[n];
    }
    cout << "You have entered: ";
    for (n=0; n<i; n++)
      cout << p[n] << ", ";
    delete[] p;
  }
  return 0;
}

输出:

  

您想输入多少个数字? 5
  输入数字:75
  输入数字:436
  输入数字:1067
  输入数字:8
  输入数字:32
  您输入了:75,436,1067,8,32,

此示例取自:http://www.cplusplus.com/doc/tutorial/dynamic/

或者您可以使用std::liststd::stackstd::vector等数据类型...

堆栈示例:

stack<string> slist;
slist.add("stack");
slist.add("a");
slist.add("am");
slist.add("i");
for(i=0;stack.size();i++)
cout << stack.pop()<< " ";

输出:

  

我是一个堆栈

答案 1 :(得分:0)

一种简单的方法是计算文本文件中的行数。这可以通过以下方式实现:

ifstream file("hangman.txt");
string line;
int lineCount = 0;

while (getline(file, line))
    lineCount++;

file.close();

在这段代码之后,lineCount将包含文本文件中的行数,这应该是答案的数量。

当然,如果你的文件中有空白行,你可能想在循环中添加一个if语句,以便在递增计数器之前检查行上是否真的有答案。