首页 > 解决方案 > 打印多次写入的单词 1 次

问题描述

我有一个这样的数组:

array[][100]={"pencil","pen","book","eraser","pen","bag","bag","pencil",......}

如果数组中有多个相同的单词,我只想打印一次。(结果=铅笔笔书橡皮擦包)。我该怎么做这个usig数组[i]?谢谢...

标签: c

解决方案


这对我来说很好。不过,我并没有在它的内存优化上做太多工作。

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

#define MAXLEN 100

int main() {
    char arr[][MAXLEN] = {"pencil", "pen", "book", "eraser", "pen", "bag", "bag", "pencil"};
    int n = sizeof(arr)/sizeof(arr[0]), c = 0, inArray = 0, i, j;
    char **result = malloc(n * sizeof(char *));
    for (i = 0; i < n; i++)
        result[i] = malloc(MAXLEN);
    for (i = 0; i < n; i++) {
        inArray = 0;
        for (j = 0; j < c; j++)
            if (!strcmp(arr[i], result[j])) {
                inArray = 1;
                break;
            }
        if(!inArray)
            strcpy(result[c++], arr[i]);
    }
    for (i = 0; i < c; i++)
        printf("%s ", result[i]);
    free(result);
    return 0;
}

推荐阅读