#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. ваш счетчик завершится ошибкой.