Вопрос по C++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопрос по C++ - 2007-05-06 19:38:40.076666
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
Пусть в файле есть чила: 1 2 3 4 5 5 6 7 8 9 10 11 Как считать из первой строки 1 число, со второй - 2, с третьей - 3 и т.д.?
|
|
|
RE: Вопрос по C++ - 2007-05-06 20:55:40.383333
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Для начала, сказал бы, где пишешь и какие технологии используешь (MFC/VCL/.NET/обычный WinAPI)? Если брать последний вариант (он более универсальный) - то, можешь использовать функцию sscanf, входящую в заголовочный файл stdio.h, который есть в каждом C/C++ компиляторе. Если же ты не знаешь, сколько точно чисел находится в строке - считай пробелы в цикле и вырезай то, что между ними находится. P.S. Если интересно - вот подробное описание функции sscanf: quote:
Header File stdio.h Category Memory and String Manipulation Routines Syntax int sscanf(const char *buffer, const char *format[, address, …]); int swscanf(const wchar_t *buffer, const wchar_t *format[, address, …]); Description Scans and formats input from a string. Note: For details on format specifiers, see scanf. sscanf scans a series of input fields, one character at a time, reading from a string. Then each field is formatted according to a format specifier passed to sscanf in the format string pointed to by format. Finally, sscanf stores the formatted input at an address passed to it as an argument following format. There must be the same number of format specifiers and addresses as there are input fields. sscanf might stop scanning a particular field before it reaches the normal end-of-field (whitespace) character, or it might terminate entirely, for a number of reasons. See scanf for a discussion of possible causes. Return Value On success, sscanf returns the number of input fields successfully scanned, converted, and stored; the return value does not include scanned fields that were not stored. If sscanf attempts to read at end-of-string, it returns EOF. On error (If no fields were stored), it returns 0.
|
|
|
RE: Вопрос по C++ - 2007-05-06 22:27:38.846666
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
Пишу обычное консольное приложение. А обычним cin>> нельзя? Меня интересует как перевески курсор на новую строку (как в Паскале readln).
|
|
|
RE: Вопрос по C++ - 2007-05-07 03:17:19.030000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
quote:
ORIGINAL: sinker Меня интересует как перевески курсор на новую строку (как в Паскале readln). endl
|
|
|
RE: Вопрос по C++ - 2007-05-07 07:10:08.240000
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
В строке cin>>a[i-1]>>endl; возникает ошибка: "D:\Microsoft Visual Studio\MyProjects\Masiv\MAIN.CPP(20) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class ostream &(__cdecl *)(class ostream &)' (or there is no acceptable conversion) Error executing cl.exe."
|
|
|
RE: Вопрос по C++ - 2007-05-07 12:23:52.990000
|
|
|
Knny
Сообщений: 5
Оценки: 0
Присоединился: 2007-05-07 12:00:59.486666
|
cin.get(максимальное число символов, разделитель) я правда ни разу этим не пользовался еще cin.getline() есть почитай в умных книжках!
|
|
|
RE: Вопрос по C++ - 2007-05-07 14:36:21.560000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
quote:
ORIGINAL: sinker В строке cin>>a[i-1]>>endl; возникает ошибка: "D:\Microsoft Visual Studio\MyProjects\Masiv\MAIN.CPP(20) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'class ostream &(__cdecl *)(class ostream &)' (or there is no acceptable conversion) Error executing cl.exe." Я думал, тебе нужен перевод строки на выход, а не на вход. Короче, не парься и юзай обычный "\n".
|
|
|
RE: Вопрос по C++ - 2007-05-07 14:48:41.883333
|
|
|
~F@ntom~
Сообщений: 56
Оценки: 0
Присоединился: 2005-10-20 17:44:01
|
хм а непроще матрицей сделать, и ваще предлагаю раз уж там числа загнать все это дело в масив, причем выругай его динамическим, а там уже проще будет :).
|
|
|
RE: Вопрос по C++ - 2007-05-07 19:08:58.113333
|
|
|
ghost1k
Сообщений: 78
Оценки: 0
Присоединился: 2006-10-18 16:37:57.833333
|
см. хелп к функции gets. Юзаецца типа gets>>i;
|
|
|
RE: Вопрос по C++ - 2007-05-07 22:59:00.540000
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
А как просто прочитать только одно число в строке, а остальные отбросить (перейти на новую строку)?
|
|
|
RE: Вопрос по C++ - 2007-05-08 14:30:06.806666
|
|
|
BoWC__sMi1IK
Сообщений: 13
Оценки: 0
Присоединился: 2007-04-27 10:54:38.746666
|
интересно, как ты единственный и гениальный, который решил офигеть какую служную задачу на олимпиаде по кодингу страдаешь такой херней ; )) читай в n-ой строчке до n-ого пробела, пока не EOF - что тут тяжелого то? :оО перед этим смотришь, скока строчек в файле, выделяешь памяти на mas[n][n] :оО
|
|
|
RE: Вопрос по C++ - 2007-05-08 19:03:01.660000
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
ОЛИМПИАДА БЫЛА НА ЯЗЫКЕ ПАСКАЛЬ. А С++ я только начал учить
|
|
|
RE: Вопрос по C++ - 2007-05-18 13:15:41.916666
|
|
|
Webkill
Сообщений: 606
Оценки: 0
Присоединился: 2007-05-06 06:59:04.066666
|
quote:
ОЛИМПИАДА БЫЛА НА ЯЗЫКЕ ПАСКАЛЬ. А С++ я только начал учить Какое место занял, я через пол года тоже на городскую алимпеаду по паскалю иду!
|
|
|
RE: Вопрос по C++ - 2007-05-18 21:43:01.073333
|
|
|
BoWC__sMi1IK
Сообщений: 13
Оценки: 0
Присоединился: 2007-04-27 10:54:38.746666
|
quote:
ORIGINAL: Webkill алимпеаду еще на АлимпЕаду по русскому загляни )
|
|
|
RE: Вопрос по C++ - 2007-05-19 00:54:40.536666
|
|
|
ВИТАХА
Сообщений: 1017
Оценки: 0
Присоединился: 2006-12-27 00:18:16.020000
|
quote:
А как просто прочитать только одно число в строке, а остальные отбросить (перейти на новую строку)? Прочитать одно число можна зделав цыкл до первого пробела(минуя первые пробелы).А на щет как читать с разных строк так есть на сколько я помню что то типа eoln() функции посотри….ну и плюс первое то что уже было,между прочим на олимпиадках такое сплошь и рядом,всмысле считать из файла а потом что то зделать и т.д.
|
|
|
RE: Вопрос по C++ - 2007-05-21 20:56:03.373333
|
|
|
St0rcrafter
Сообщений: 78
Оценки: 0
Присоединился: 2007-05-21 20:36:10.756666
|
а не проще завести массив типа a[n][n] в первую строку массива из первой линии считать ввод, потом в цикле до eoln() считать все в какую-нить ненужную переменную, потом опять две в массив, остальное в хлам, и не забывай проверять на eof() а то тут некоторые насоветовали пробелы считать, вырезать… прям парсинг какой-то Оо
|
|
|
RE: Вопрос по C++ - 2007-05-21 23:12:48.913333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: St0rcrafter а то тут некоторые насоветовали пробелы считать, вырезать… прям парсинг какой-то Оо ты это называешь парсингом? разбор xml ещё можно называть парсингом, там реально возникает необходимость конечном автомате, стеке и прочих вещах и теории. а здесь, всё делается в полпинка даже если и не подозреваешь о существовании всех этих теорий. замечу делается быстрее и эффективнее, нежели всякими scanf'ами, std::cin'ами и пр., тк: 1. не требуется считанную строку переводить в число, а потом обратно в строку (если первое – это сплошные умножения, то второе хуже – деления), для современного проца – это семечки, но… тут же не сказано в каком количестве придётся обрабатывать, и с какой скоростью будет возможно читать ввод; 2. на всё про всё понадобиться лишь три переменные: одна для хранения текущего символа, другая – номера строки, и третья номера числа в строке. соответственно, функцией разбора из стека откушается… где-то 3*4+8 байт. может чуть больше, но суть в том, что это константа не зависящая от n. читая числами а не char'ами тоже можно уложиться в константное число байт, но, первый пункт останется. void do_line (int n)
{
int c = ' ';
int i = 0;
while (!feof (stdin) && c != '\n') {
while ((c = fgetc (stdin)) == ' ')
if (c == EOF || c == '\n')
return;
while (c != ' ' && c != '\n') {
if (c == EOF)
return;
if (i == n)
fputc (c, stdout);
c = fgetc (stdin);
}
if (i == n)
fputc ('\n', stdout);
++ i;
}
}
void do_work ()
{
int line;
line = 0;
while (!feof (stdin))
do_line (line ++);
} замечу, что если взамен всего этого, завести булевскую переменную и сделать конечный автомат, то количество проверок на EOF, и '\n' сильно уменьшится. будет нечто в стиле: while ((c = fgetc (stdin)) != EOF) {
if (c == '\n') {
++ line;
continue;
}
if (skipping_spaces) {
if (c != ' ')
skipping_spaces = false;
} else {
if (c != ' ') {
if (i == line)
fputc (c, stdout);
} else {
// переключаем состояние, тк текущее число закончилось
if (i == line)
fputc ('\n', stdout);
skipping_spaces = true;
++ i;
}
}
} что вы парсеров никогда не писали? неужто никогда не возникало желания написать свой собственный язык программирования? написать, например, свой ассемблер, заставить его скомпилировать себя, и решить наконец вопрос что же было раньше курица или яйцо – или, если без аллегорий: каким образом был скомпилирован первый компилятор языка C, написанный на C, когда ещё не было компиляторов языка C. ps. кстати, глянул на второй пример, увидел баг… вероятно, в первом он тоже есть. скорее всего. ищите сами, если надо. ;)
|
|
|
RE: Вопрос по C++ - 2007-05-23 11:44:39.933333
|
|
|
Krik99
Сообщений: 197
Оценки: 0
Присоединился: 2007-04-07 13:13:31.816666
|
Подскажите мне , у меня когдато был компилятор для C++ ( Microsoft Visual Studio 6.0 ) какой проргой по проще можно её заменить? Чтобы эта прога занимала до 100мб… А то очень хочу на Си чтонибуть под винду написать… За ранние благодарен!!!:D
|
|
|
RE: Вопрос по C++ - 2007-05-24 21:12:29.760000
|
|
|
Krik99
Сообщений: 197
Оценки: 0
Присоединился: 2007-04-07 13:13:31.816666
|
Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0 …[:(][:(][:(]
|
|
|
RE: Вопрос по C++ - 2007-05-24 21:13:23.916666
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
В Pascal-е с етим немного проще: read, readln :)
|
|
|
RE: Вопрос по C++ - 2007-05-24 21:14:04.793333
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
quote:
ORIGINAL: Krik99 Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0 …[:(][:(][:(] Borland C++ Builder пробовал?
|
|
|
RE: Вопрос по C++ - 2007-05-24 21:15:19.840000
|
|
|
sinker
Сообщений: 134
Оценки: 0
Присоединился: 2007-01-08 21:55:33.930000
|
quote:
ORIGINAL: Krik99 Видать нет больше прог чтоб на Си чтонибуть под винду написать , кроме Microsoft Visual Studio 6.0 …[:(][:(][:(] Microsoft Visual Studio 6.0 - не прога а среда разработки
|
|
|
|
|