Понимание конкатенации строк C - PullRequest
0 голосов
/ 04 марта 2012

Для оценки в C я должен взять два файла со строками внутри них и строку для их объединения, например:

Если file1 содержит

Now is the

time for all

good men to

come to the aid of

the party.

, а file2 содержит:

alpha

beta

gamma

, затем вывод

scat XX file1 file2

(scat - название программы)

должен быть

Now is theXXalpha

time for allXXbeta

good men toXXgamma

come to the aid ofXX

the party.XX

и вывод из

scat XX file2 file1

должно быть

alphaXXNow is the

betaXXtime for all

gammaXXgood men to

XXcome to the aid of

XXthe party.

Чтобы понять это, я пытался поиграть с конкатенацией строк, пытаясь вручную объединить строки.

У меня вопрос (A: как мне получить доступ к отдельным строкам файла в c?) И B: если я вручную введу:

  char *str1 = "hello";

  char *str2 = "world";

, как бы я добавил эти строки вместе безпредопределенная функция.Вначале я думал о том, чтобы использовать цикл for:

 for(str1; *str1 != '\0'; str1++)

     if(*str1 == '\0')

       *str1++ = *str2++;

Единственная проблема в том, может ли это вызвать ошибку сегмента из-за доступа к памяти?

, когда я сталкиваюсь с '\ 0'в строке .. как я могу расширить эту строку?если я просто не скопирую обе строки в новый char str3 [200]?

(все вышеизложенное - попытаться помочь мне понять, как работают строки и строки concat, любая помощь в изучении этого будет принята с благодарностью.)

Euden

Ответы [ 4 ]

1 голос
/ 04 марта 2012

Я не собираюсь делать это для вас, но вот несколько советов / подводных камней.

  1. Ручка угловая. Что если файлы не имеют одинакового количества строк?

  2. Если вам действительно не нужно поддерживать неограниченное количество строк (спросите своего профессора), я бы предложил буфер из 2048 символов для ввода и 5000 для вывода (2 * 2048 + строка конкатенации).

  3. Вы хотите прочитать, используя fgets, входные буферы для обоих файлов, а затем объединить их с помощью strncat.

0 голосов
/ 04 марта 2012

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

Отказ от ответственности: не пытайтесь делать это дома.

0 голосов
/ 04 марта 2012

Если вам нужны подсказки, просмотрите исходный код за Мартина Бродхерста, читающего текстовый файл в C и функции strcat(). В Интернете есть много мест, где доступен исходный код для strcat().

0 голосов
/ 04 марта 2012

То, как вы читаете строки из ваших входных файлов, вероятно, должно основываться на том, какие функции преподавал вам ваш профессор или о чем вы читали. Конечно, это не лучший способ сделать это, но простой способ - использовать fopen (), чтобы открыть файл, а затем getline (), чтобы прочитать каждую строку. Это просто, но требует от вас выделить избыточное пространство буфера (и рискнуть переполнением буфера, если вы не уверены, сколько места вам понадобится). Также требуется, чтобы вы обрезали \ n из каждой строки ввода.

Что касается объединения без использования встроенной функции, у предложенного вами метода может быть проблема, которую вы боитесь. Вам нужно знать, сколько места у вас есть для записи, и если вы выходите за рамки этого, вы напрашиваетесь на неприятности (и вы их получите). Создание нового буфера для размещения вывода сохранит вас в безопасности, но вы предлагаете создать два новых буфера; нужен только один.

...