读取字符后跟数字c ++

时间:2016-10-12 21:38:33

标签: c++ arrays text character

所以我一直在网上寻找一种方法来读取字符后跟数字,到目前为止,每个人都在使用字符串函数。但是,我只允许使用C风格的字符数组,当我读入文件时,我的程序出现了问题。

我的文本文件是:

23
11

Java 2 linux 3 fear 0 pool 2 do 0 red 1 lock. 1 I 0 random 2 computers, 0 not 0 the 0 open 2 car! 2 C, 0 lack 0 of 0 dog 1 green 2 C++ 0 bottle 2 wrong, 2 them. 0

5 1 10 21 9 6 21 11 13 16 20

到目前为止我的节目打印出来了:

11 23
Java 2

但是,我希望它能打印出所有内容。有什么建议?这是我的代码

#include <iostream>
#include <fstream>

using namespace std;

struct pieces {

char word[5];
int jump;
} ;

 // Main Function
int main ()
{
// declare variables
int wordCount[2];
int keyCount[2];
int numKeys;
int numWords;
int keyAmount = 1;
int wordAmount = 23;
pieces cypher[wordAmount];
char filename[10];
ifstream inData;

  //prompt user for input file

cout << " Enter file name: ";
cin >> filename;

inData.open(filename);

if(inData.is_open());
{

    // read list of names into array

    for ( numKeys = numWords = 0; numKeys < keyAmount; numKeys++){

        inData >> wordCount[numKeys] >> keyCount[numKeys];

        for( numWords = 0; numWords < wordAmount; numWords++){

        inData >> cypher[numWords].word >> cypher[numWords].jump;

        }
    }



    // print out unsorted onto console

        for ( int i = 0; i < numKeys; ++i){
    cout << wordCount[i] << " ";
    cout << keyCount[i] << "\n";
    cout << cypher[i].word << " ";
    cout << cypher[i].jump << " ";



    }

}
inData.close();

  return 0;
}

2 个答案:

答案 0 :(得分:0)

您的阅读代码工作正常,但打印出for ( int i = 0; i < wordAmount; ++i){ cout << cypher[i].word << " "; cout << cypher[i].jump << " "; } 内容的for循环不正确。将其更改为此以查看文件中的所有内容:

for loop

执行2次迭代的类似wordCount次,以查看keyCount->where的内容。

答案 1 :(得分:0)

我不知道你的目标是什么,但是如果你只想将文本流式传输到控制台窗口并在文件编写和格式化时打印它,你可以使用stdio.h和c函数。

尝试使用fgetc();将符号读入char变量后跟printf();然后检查fgetc()是否为'',然后检查第二个符号以查看它是字母还是数字。如果它们中的任何一个增加你的计数器一个并等待另一个''。

如此。等待 ' '。检查下一个符号。如果是数字d ++;如果符号c ++;等待下一个'';如果它再次再次等待。如果它是一个数字加1到d如果它是一个符号添加另一个到c。但它仅用于实际的单词。如果你的文件包含用l33t写的单词,而一个单词以1amth3b3st之类的数字开头。你的柜台会失败。