2013-12-12 3 views
0

Я смог решить эту проблему, спасибо всем, кто помог мне ее решить.Заменить значение в строке другим с другой строки

+3

Вы говорите, что проблема в том, что, когда у вас есть код, который вы хотите использовать, код не компилируется. Разве вы не думаете, что было бы супер-идея предоставить код, который не компилируется, вместе с выходом ошибки при попытке компиляции? – mah

+0

Извините, я добавил другую часть. Это мой первый раз, используя этот сайт. – user3096716

+0

Какая ошибка возникает при попытке скомпилировать? У вас также будет проблема, когда дело доходит до копирования строк, 'word [i] = dictn [j]' только собирается назначать указатели, а не копировать фактические символы в слове. – Macattack

ответ

1

Вы можете использовать

sprintf(word, "%s ", dictn); 

Если ваш код работает с Printf он должен работать с Sprintf, если вы не переполнить «слова», в том числе прекращение NULL, так что вы, возможно, придется изменить размер «слово «если он меньше, чем dictn.

+0

Спасибо, я попробую! Но не могли бы вы объяснить, что делает sprintf? Это то же самое, что fprintf? – user3096716

+0

sprintf работает как printf, но печатает строку символов вместо стандартного вывода (в примере печатается строка с именем «слово»). Было бы хорошо видеть декларацию «слова» и «dictn». Самый безопасный способ справиться с проблемой, которую вы имеете, - это читать символ по характеру, ищущему пустые места, вкладки или новые строковые символы, потому что способ чтения из файла может переполнять «слово» или «dictn», если пользователь подает вашу программу в текстовый файл с очень длинной непрерывной последовательностью символов, и ваша программа сбой или случайное поведение –

0

Прежде всего, я предполагаю, что вы создали массивы word и dictn с достаточным размером, чтобы удерживать строку максимальной длины в любом из ваших файлов.

Первая ошибка:

В циклах, которые вы создали, i представляет количество строк в файле ввода и j представляет количество строк в словаре. word - ваша переменная строки ввода, а dictn - это ваша переменная словаря. Но вы хотите получить и изменить j-й символ слова i-го или dictn. Это может вызвать ошибку, потому что может быть такой случай:

Предположим, что есть 10 слов в inp файла и 100 слов на dictn. А в ваших циклах i имеют значение 8 и j имеют значение 88. Соответствующие этим значениям i и j, слово имеет строковое значение, например, apple и dictn имеет также значение строки apple. Таким образом, это означает, что apple является восьмым словом в файле ввода и 88-м словом в файле словаря. И если один из тех условий if удовлетворен, компилятор пытается применить заявление, например word[i]=dictn[j];. Для этого примера это означает word[8] = dictn[88];. Но обе эти строки имеют apple как значения, которые состоят всего из 5 символов! И это вызовет ошибку, так как вы попытались получить 88-й символ строки длиной 5 строк и присвоить ее восьмому символу строки длиной 5 строк. Таким образом, ваш код неправильный, он будет работать только в некоторых случаях, что будет редкостью.

Вторая ошибка:

Я предполагаю, что вы хотите прочитать весь файл словаря для каждого слова входного файла, но вы будете иметь возможность читать только первое слово входного файла, так как вы не вновь открыть его или установить индикатор положения в начале словарного файла после того, как вы прочитали полный словарь.

Третья ошибка:

Ваш первый, если заявление не будет достигнуто если вы создали len1 и len2 переменные как целые числа. Потому что в вашем заявлении, если есть умножение десятичного числа и целое число, которое возвращает 0 в результате и так fscanf() игнорирует пробельные, len1 и len2 будет по крайней мере 1.

Четвертая ошибка:

Также ваш оператор else if никогда не будет достигнут, потому что, если строка имеет такое же значение с другим, их первый символ также будет равен друг другу, и ваше утверждение if, в котором вы сравниваете их первые символы, также будет принято.


На самом деле, я хотел бы написать код, как решение, но в первую очередь вам нужно исправить вещи вверх, которые логически неправильно, потому что я не знаю, что вы на самом деле пытаетесь достичь с помощью кода -Просто потому, что я заметил с полным предположениями. Но я могу предоставить вам некоторые рекомендации:

  1. Преобразование len1 и len2 переменных из int в float и литых значения, которые возвращаются из strlen() функций float.
  2. Заново запустите файл dict для каждой итерации внешнего контура. (И не забудьте не закрывать его).
  3. Чтобы изменить файл inp, вы можете использовать fpos_t тип переменной для отслеживания указателя положения вашего файла inp (fgetpos(), чтобы получить текущую позицию и fsetpos() изменить положение со значением fpos_t переменной. Вы можете найти их.) И введите слово с fprintf() или fputs() в это место, чтобы изменить эту строку.
Смежные вопросы