好的,只是提前做好,这是IS作业,但是还有一周不会到期,而且我还不完全确定作业的最终细节。长话短说,在不知道他将在课堂上介绍什么概念的情况下,我决定对作业进行修改,但我遇到了问题。我需要为家庭作业做的部分工作是从输入文件中读取单个字符,然后,考虑到字符在其包含的单词中的位置,在屏幕上重复该字符。我遇到的问题是,文本文件中的单词是单个单词,每个单词位于文件的不同行。由于我不确定我们是否会使用<string>
进行此分配,因此我想知道是否有任何方法可以在不使用<string>
的情况下识别该行的结尾。
现在,我使用一个简单的ifstream fin;
将字符拉出来。我无法弄清楚如何让它识别一个单词的结尾和另一个单词的开头。为了包含代码,以下是我到目前为止所做的全部内容。我希望它会显示某种endl
字符,但它只是将所有单词打印出来一起运行。
ifstream fin;
char charIn;
fin.open("Animals.dat");
fin >> charIn;
while(!fin.eof()){
cout << charIn;
fin >> charIn;
}
我原本忘记了一些事情:
我必须处理每个字符,因为它是输入的(我打开它的循环需要在我读入下一个字符并增加我的计数器之前运行)。此外,&#39; Animals.dat&#39;中的单词长度。变化使我无法设置多次迭代。我们还没有覆盖fin.get()或.getline(),所以这些也是不受限制的。
老实说,我无法想象这是不可能的,但考虑到限制,如果是这样的话,我不会太沮丧。我大多认为这是一个有趣的问题,可以坐一会儿。
答案 0 :(得分: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];
答案 1 :(得分:0)
>>
运算符会忽略空格,因此您永远不会获得换行符。即使不允许<string>
类,也可以使用c-strings(字符数组):
ifstream fin;
char animal[64];
fin.open("Animals.dat");
while(fin >> animal) {
cout << animal << endl;
}
当从c字符串中读取字符时(上面是animal
),最后一个字符始终为0,有时表示为'\ 0'或NULL
。这是在迭代单词中的字符时检查的内容。例如:
c = animal[0];
for(int i = 1; c != 0 && i < 64; i++)
{
// do something with c
c = animal[i];
}