好吧,先说一句,这是家庭作业,但是再过一周就要交作业了,我也不太确定作业的最终细节。长话短说,在不知道他会在课堂上介绍什么概念的情况下,我决定尝试一下作业,但我遇到了一个问题。我的家庭作业需要做的一部分是读取输入文件中的单个字符,然后根据字符在其包含的单词中的位置,在屏幕上重复该字符。我遇到的问题是,文本文件中的单词是单个单词,每个单词都在文件中的不同行。因为我不确定我们是否可以使用<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(),所以这些也是禁止的。
老实说,我不能想象这是不可能的,但考虑到限制,如果是的话,我不会太沮丧。我主要认为这是一个有趣的问题,坐了一段时间。
发布于 2013-03-13 02:47:28
>>
操作符会忽略空格,因此您永远不会得到换行符。即使不允许使用<string>
类,也可以使用c字符串(字符数组):
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];
}
发布于 2013-03-13 02:29:15
为什么不使用字符数组呢?您可以按照如下方式进行尝试:
#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];
https://stackoverflow.com/questions/15375899
复制相似问题