Нужно считать два слова (разделенных пробелом) из первого файла и напечатать во второй файл только те буквы, которые встречаются в обоих словах ровно 1 раз.
Что сделано не верно в моей программе?
https://ideone.com/dhpwAA
C/C++
Си. Работа со строками.
вы строки считали неверно.
можно так fscanf(f,"%s%s",s1,s2);
вообще первое что нужно сделать при такой ситуации это установить точку останова и посмотреть, что у вас храниться в переменных.
В вашем варианте у вас в s1 храниться строка целиком, а во втором пустая строка. И ради всего святого, форматируйте код нормально, читать сложно.
нормально это например так https://onlinegdb.com/SyxJFFTv_
можно так fscanf(f,"%s%s",s1,s2);
вообще первое что нужно сделать при такой ситуации это установить точку останова и посмотреть, что у вас храниться в переменных.
В вашем варианте у вас в s1 храниться строка целиком, а во втором пустая строка. И ради всего святого, форматируйте код нормально, читать сложно.
нормально это например так https://onlinegdb.com/SyxJFFTv_
Vv G
А почему нельзя считывать как я?
есть момент "в обоих словах ровно один раз". Предположим "hello world" какие буквы он должен вывести? Можно понять как н-р буква o встречается и там и там и её и надо выводить и только её. Или н-р буква h встречается один раз в первом слове, ни одного во втором но если брать оба слова - то один раз =)
На всякий вариант со вторым, но кое-какие фишки можно взять чтобы упростить первый:
Пользуясь что символы в алфавите расположены подряд (есть н-р заморочка с русскими при кодировке 866, но про неё не будем):
1 - читаете два слова как одно склеенное слово
2 - заводите массив счетчиков размером в кол-во букв в словаре
3 - пробегаете по строке, увеличивая счетчик используя символ как индекс
4 - пробегаете циклом по массиву счетчиков, если счетчик = 1 преобразуете обратно индекс в символ и выводите в файл.
Набросок (нет проверок, вместо массива счетчиков можно было бы использовать одно 64 разрядное целое и т. п.):
https://onlinegdb.com/H1Dnr5aP_
На всякий вариант со вторым, но кое-какие фишки можно взять чтобы упростить первый:
Пользуясь что символы в алфавите расположены подряд (есть н-р заморочка с русскими при кодировке 866, но про неё не будем):
1 - читаете два слова как одно склеенное слово
2 - заводите массив счетчиков размером в кол-во букв в словаре
3 - пробегаете по строке, увеличивая счетчик используя символ как индекс
4 - пробегаете циклом по массиву счетчиков, если счетчик = 1 преобразуете обратно индекс в символ и выводите в файл.
Набросок (нет проверок, вместо массива счетчиков можно было бы использовать одно 64 разрядное целое и т. п.):
https://onlinegdb.com/H1Dnr5aP_
Vv G
спасибо
Похожие вопросы
- Годится ли wchar_t для работы со строками UTF-8 в Си?
- Помогите написать код на Си, по теме "строки".
- Помогите доработать код на СИ по теме строки
- Помогите с программированием на Си Работа с последовательностями элементов
- Работа со строками, поиск слова
- Задача по работе со строками на языке программировании c++
- Переход на следующую строку при считывании данных из файла в Си
- Задача на строки в Си
- Нужно не выводить пробел в конце строки. язык си (Андрей, даже ваш вариант сайт считает не рабочим... )
- Инкрементировать строки массива указателей. (Си)