我正在尝试编写一个按字母顺序排序小字典的程序。为此,我需要能够将未排序字典中的字符串复制到排序字典。如果我尝试复制整个字符串:
#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;
~~~~~~~~~~~~~~~~~~~ ^
另一方面,如果我复制单个字符,我无法区分字符串,这在访问dictionary2时是必需的。
答案 0 :(得分:2)
由于您的编译器告诉您数组不能在c中分配,要复制字符串,您需要strcpy()
函数
strcpy(dictionary2[0].word[i], dictionary[0].word[i]);
您需要确保目标数组有足够的空间来容纳字符串,即+1
终结符的字符串nul
中的字符数。
答案 1 :(得分: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);
}
我认为如果没有接近它的话会有用......
答案 2 :(得分:0)
你需要使用一个函数来分配字符串(字符数组)
这样做的常用功能是:
char a[15];
strcpy( a , "ameer" ); % copying second string to first one
来自库的意味着a =“ameer”;
所以在你的情况下你可以写:
strcpy( dictionary2[0].word , dictionary[0].word );
答案 3 :(得分: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));
答案 4 :(得分:-1)
您要做的是使用赋值运算符'='完全复制1个字符串。您可以在for循环中执行此操作,也可以使用strcpy()。