2015-04-19 4 views
1

Я пытаюсь написать программу, которая в алфавитном порядке сортирует небольшой словарь. Для этого мне нужно иметь возможность копировать строки из несортированного словаря в отсортированный словарь. Если я пытаюсь скопировать всю строку, как например:Копирование строки из одной структуры в другую структуру

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#include <ctype.h> 

struct entry 
{ 
    char word[15]; 
    char definition[50]; 
}; 


void dictionarySort(struct entry dictionary[]) { 
    int i; 

    struct entry dictionary2[100] = {{}}; 

    for (i = 0; i <= strlen(&dictionary->word[0]); i++) { 
     dictionary2[0].word[i] = dictionary[0].word[i]; 

    } 
    dictionary2[0].word = dictionary[0].word; 

    printf("%s\n",dictionary2[0].word); 

} 

int main (void) { 
    struct entry dictionary[100] = 
    {{"aerie", "a high nest"}, 
    {"abyss", "a bottomless pit"}, 
    {"ahoy", "a nautical call of greeting"}, 
    {"addle", "to become confused"}, 
    {"aardvark", "a burrowing African mammal"}, 
    {"agar", "a jelly made of seaweed"}, 
    {"acumen", "mentally sharp; keen"}, 
    {"aigrette", "an ornamental cluster of feathers"}, 
    {"affix", "to attach"}, 
    {"ajar", "partially opened"}}; 
    dictionarySort(dictionary); 
} 

я получаю следующее сообщение об ошибке:

error: array type 'char [15]' is not assignable 
     dictionary2[0].word = dictionary[0].word; 
     ~~~~~~~~~~~~~~~~~~~^

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

ответ

2

Как ваш компилятор говорит вам массивы не могут быть переданы в C, чтобы скопировать строку вам нужна функция strcpy()

strcpy(dictionary2[0].word[i], dictionary[0].word[i]); 

вам необходимо убедиться, что целевой массив имеет достаточно места для хранения строки, то есть количество символов в строке +1 для терминатора nul.

0

вам нужно использовать функцию для назначения строки (символьные массивы, а)

общая функция, чтобы сделать это:

char a[15]; 
strcpy(a , "ameer"); % copying second string to first one 

из библиотеки, что означает = «амир»;

так что в вашем случае вы можете написать:

strcpy(dictionary2[0].word , dictionary[0].word); 
0

dictionary2[0].word[i] = dictionary[0].word[i]; совершенно неправильно. Вы не можете скопировать один массив в другой как операцию присваивания, как и для типа int.

Вы можете использовать strcpy (или strncpy) для копирования байтов из одного массива в другой. Или используйте memcpy.

strcpy(dictionary2[0].word[i], dictionary[0].word[i]); 



memcpy(dictionary2[0].word[i], 
dictionary[0].word[i],sizeof(dictionary[0].word)); 
1

Вы можете посмотреть в использовании qsort (если у вас есть тип Linux/Mac man qsort для получения дополнительной информации)

вызов QSort будет выглядеть qsort(dictionary,size_of_arr, sizeof(entry), func_name); Вам придется сделать функцию сравнения с именем func_name (хотя вы можете назвать это все, что вы хотите, до тех пор, как вы передаете его правильно в вызове функции.

int func_name(void *ent1, void *ent2) 
{ 
    struct entry a = *(struct entry*)ent1, b = *(struct entry*)ent2; 
    return strcmp(a.word, b.word); 
} 

Я думаю, что будет работать, если не что-то близкое к этому будет ...

-1

Что вы пытаетесь сделать, это копировать 1 строку полностью с помощью оператора присваивания '='. Вы можете сделать это в цикле for или использовать strcpy().

Смежные вопросы