Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Произвольный доступ к файлам

Дочка Мияги Ученик (111), открыт 1 день назад
имя входного файла: in.txt
Условие:
Шифр следующий: после каждого слова идёт число – позиция в файле, с которой начинается следующее слово.
После него идёт позиция, с которой начинается следующее и т.д.
Если позиция равна 0, значит сообщение расшифровано полностью.

Например: Hello 8 world 0


Читаем слово: Hello (и выводим в консоль)
Читаем позицию следующего: 8
Она не равна 0: переходим на позицию 8
Читаем слово: world (и выводим в консоль)
Читаем позицию следующего: 0
Она равна 0: конец шифра

В результате: Hello world


Или другой пример: This 33 a 23 message 0 secret 13 is 8

Читаем слово: This (и выводим в консоль)
Читаем позицию следующего: 33
Она не равна 0: переходим на позицию 33
Читаем слово: is (и выводим в консоль)
Читаем позицию следующего: 8
Она не равна 0: переходим на позицию 8
Читаем слово: a (и выводим в консоль)
Читаем позицию следующего: 23
Она не равна 0: переходим на позицию 23
Читаем слово: secret (и выводим в консоль)
Читаем позицию следующего: 13
Она не равна 0: переходим на позицию 13
Читаем слово: message (и выводим в консоль)
Читаем позицию следующего: 0
Она равна 0: конец шифра

В результате: This is a secret message

Формат входных данных
Слова и позиции следующих слов в файлике in.txt разделённые пробелами

Формат выходных данных
Расшифрованное сообщение (слова разделённые пробелами)

Примечания
Используйте обычный
cin >> word >> num;
для чтения слов и чисел, не надо мучиться с символами.
1 ответ
Imglebik Знаток (311) 1 день назад
погоди пару минут сделаю
Дочка МиягиУченик (111) 1 день назад
жду недождусь
Imglebik Знаток (311) #include <iostream> #include <string> using namespace std; int main() { string s; getline(cin, s); string ans; int cp = 0; while (true) { string word; while (cp < s.size() && s[cp] != ' ') { word += s[cp++]; } ans += word + " "; cp++; string num_str; while (cp < s.size() && s[cp] != ' ') { num_str += s[cp++]; } int next_cp = stoi(num_str); if (next_cp == 0) break; cp = next_cp; if (cp < s.size() && s[cp] == ' ') cp++; } cout << ans << endl; return 0; } ну вроде все если нужны обьяснения могу добавить
ImglebikЗнаток (311) 1 день назад
единственное что я даун забыл что строка вводиться не из консоли а из файла но это уже не так сложно исправить))
Похожие вопросы