3

好的,先说明一下,这是家庭作业,但还要一周才能完成,而且我不完全确定作业的最终细节。长话短说,不知道他会在课堂上介绍什么概念,我决定试一试作业,但我遇到了一个问题。我需要做的部分作业是从输入文件中读取单个字符,然后,给定字符在其包含的单词中的位置,在屏幕上重复该字符。我遇到的问题是,文本文件中的单词是单个单词,每个单词都位于文件的不同行。由于我不确定我们是否会<string>用于此作业,所以我想知道是否有任何方法可以在不使用<string>.

现在,我正在使用一个简单ifstream fin;的方法来提取字符。我只是不知道如何让它识别一个单词的结尾和另一个单词的开头。为了包含代码,以下是我到目前为止所获得的全部内容。我希望它会显示某种endl字符,但它只是将所有单词一起打印出来。

ifstream fin;
char charIn;

fin.open("Animals.dat");
fin >> charIn;
while(!fin.eof()){
    cout << charIn;
    fin >> charIn;
}

我最初忘记包括的几件事:

我必须在输入每个字符时对其进行处理(在读取下一个字符并增加计数器之前,我的打印循环需要运行)。此外,“Animals.dat”中单词的长度各不相同,这使我无法仅设置多次迭代。我们也没有涵盖 fin.get() 或 .getline() 所以这些也是禁止的。

老实说,我无法想象这是不可能的,但考虑到这些限制,如果是这样,我并不会太沮丧。我主要认为坐一会儿是一个有趣的问题。

4

2 回答 2

1

为什么不使用字符数组?您可以尝试如下:

    #define MAX_WORD_NUM 20
    #define MAX_STR_LEN 40 //I think 40 is big enough to hold one word.
    char words[MAX_WROD_NUM][MAX_STR_LEN];

然后你可以输入一个单词到单词中。

    cin >> words[i];
于 2013-03-13T02:29:15.293 回答
0

运算符会忽略空格,因此>>您永远不会得到换行符。即使<string>不允许该类,您也可以使用 c-strings(字符数组):

ifstream fin;
char animal[64];

fin.open("Animals.dat");

while(fin >> animal) {
  cout << animal << endl;
}

从 c-string 读取字符时(animal如上所示),最后一个字符始终为 0,有时表示为 '\0' 或NULL. 这是您在遍历单词中的字符时检查的内容。例如:

c = animal[0];
for(int i = 1; c != 0 && i < 64; i++)
{
    // do something with c
    c = animal[i];
}
于 2013-03-13T02:47:28.313 回答