| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [c++]Работа со строками |
| Автор: maxnsk82 20.1.2010, 13:37 | ||
| У меня задание: Функция переписывает строку. Если она находит в строке число, то вместо него она переписывает в выходную строку соответствующее по счету слово из входной строки. (например, "aaa bb1bb cc2cc" - "aaa bbaaabb ccbb1bbcc"). Пытался хотя бы строку перекинуть в функцию, а затем обратно, но тоже не работает:
|
| Автор: Peter 20.1.2010, 14:02 | ||
В main() символ C имеет тип char[256], а в функции function() - char. Писать надо хотя бы
|
| Автор: maxnsk82 20.1.2010, 14:14 |
| Проставил *. но так тоже не работает, ошибка: 'function': identifier not found. Как сделать вообще не втыкаю(...мне бы работающий код, может тогда разберусь, уже 6 часов как пытаюсь сам сделать( |
| Автор: maxnsk82 21.1.2010, 10:28 | ||
Кажется уже близко. но что-то не так в: word[i][j]='/0', не знаю почему?'=' : truncation from 'int' to 'char' и '=' : truncation of constant value - варнинги выдаёт. и что то с возвращаемым значением не то - туплю по поводу передачи параметров в функцию, никак не доходит(....помогите дописать:
|
| Автор: t_gran 21.1.2010, 10:57 | ||
Да потому, что нужно писать '\0' а не '/0'. И основная ошибка, это то, что функция возвращает указатель на массив, память из под которого освобождается по завершению вашей функции. Поэтому, чтобы сильно не заморачиваться с кодом, сделайте массив newstr статичным (static), тогда всё заработает. |
| Автор: Luyan 21.1.2010, 11:32 | ||
поправил ваш код, в первом цикле немного не то делали, а во втором забыли 2 переменные инкрементировать. |
| Автор: maxnsk82 21.1.2010, 11:39 |
| заменил: char static newstr[256]; "/" на "\" тоже везде, но не выполняется программа - ввод массива происходит, enter: такое вот сообщение: Unhandled exception at 0x00fe1540 in prog_lr3v13.exe: 0xC0000005: Access violation reading location 0x0000fb57. кнопки: break- выход/continue-сообщение так и остаётся( |
| Автор: t_gran 21.1.2010, 11:45 | ||||
И всё тогда нормально выполняется. Не верите, см. прикреплённый файл. |
| Автор: wasistdas 21.1.2010, 12:02 | ||||||
Ваш вариант не работает и не работает он не из-за static. К автору вопроса, ваша прога вылетает при чтение str, потому что:
тут мы пролетает с последним символом, нужно ставить проверку во втором цикле на конец строки Рабочий вариант:
Такой вопрос, а почему цифр то 5?)) а не 10.И еще не должна ли здесь быть рекурсия ?, т.е. дано: ааа ббб1ввв ггг2ддд -> 3 строка по вашему методу будет гггббб1вввддд, по-хорошему еще 1 можно разложить. |
| Автор: Luyan 21.1.2010, 12:26 |
| я так смотрю, на мой рабочий исходник никто не посмотрел, все свои стали делать. я же написал: поэтому там и была ошибка. Я это исправил. Но хоть мой код рабочий, он не до конца верный, так как я начинал записывать второе слово в позицию word[1][4] и так далее, вариант wasistdas'а с первым циклом более правильный. думаю нет, смотри пример тс. |
| Автор: maxnsk82 21.1.2010, 12:42 |
| Всем спасибо!!!) wasistdas - молодец) Рекурсия я думаю не нужна - ориентируясь по примеру. А то что чисел 5))..ну да в принципе не важно, вроде ещё есть время переправить до 9)...ещё раз спасибо! очень помогли! |
| Автор: Dancer 21.1.2010, 13:43 |
| а ничего, что в задании написано "число", а вы организуете замену по "цифрам"? (скорее всего вся фишка задания именно в этом) в таком случае, только первые 10 слов будут вставляться в дальнейший текст. хотя конечно, если написать aaa121bbb то что нужно будет в это случае сделать? (слово 121; слово 1, слово 21; слово 1, слово 2, слово 1; слово 12, слово 1) критерий выбора будет не понятен тогда, и что вставлять вместо слова с несуществующим индексом? Наверное просто в задании ошибка. |