Чтение символов, за которыми следуют числа c

#c #arrays #text #character

#c #массивы #текст #характер

Вопрос:

Итак, я искал в Интернете способ чтения символов, за которыми следуют цифры, и до сих пор все использовали строковые функции. Однако мне разрешено использовать только массивы символов в стиле 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;
}
 

Комментарии:

1. Возможно, было бы проще создать свой собственный string класс с динамически изменяющимся размером массива символов, а затем использовать один из soln, который использует string

2. откуда у вас ключ = 1?

3. @AndyG Итак, я бы создал динамический массив символов с изменяющимся размером для каждого раза, когда я читаю в словах?

4. @Raindrop7 Если я изменю это число на что-либо другое, оно просто продолжит печатать числа, а не даже символ.

5. вы хотите хранить слова в массиве, а числа в другом?

Ответ №1:

Ваш код чтения работает правильно, но цикл for, который выводит содержимое cypher , неверен. Измените его на это, чтобы увидеть все из файла:

 for ( int i = 0; i < wordAmount;   i){
    cout << cypher[i].word << " ";
    cout << cypher[i].jump << " ";

}
 

Выполните аналогичную for loop из 2 итераций, чтобы увидеть содержимое wordCount и keyCount .

Ответ №2:

Я не знаю, какова ваша цель, но если вы просто хотите передать свой текст в окно консоли и распечатать его в том виде, в каком он записан и отформатирован в файле, вы можете использовать функции stdio.h и c.

Попробуйте использовать fgetc(); для чтения символов в переменную char, за которой следует printf(); а затем проверьте, когда fgetc() равен ‘ ‘, затем проверьте 2-й символ, чтобы увидеть, является ли он буквой или цифрой. если это любой из них, увеличьте свой счетчик на единицу и дождитесь другого ‘ ‘.

итак. дождитесь ‘ ‘. проверьте следующий символ. если цифра d ; если символ c ; дождитесь следующего ‘ ‘; если это ‘ ‘, снова подождите снова. если это цифра, добавьте 1 к d, если это символ, добавьте еще один к c. но это только для реальных слов. если ваш файл содержит слова, написанные l33t, и слово начинается с цифры, например, 1amth3b3st. ваш счетчик завершится ошибкой.