2012-05-11 89 views
-1

我已經從兩個文件中讀取字符串,並將它們存儲到兩個單獨的數組中,然後嘗試對它們進行排序並將它們寫入另一個文件中......這部分以它應該的方式工作但我真正需要做的是將兩個數組中的字符串合併爲一個,以便我可以按字母順序對它們進行排序,然後寫入一個文件,但問題是,當我嘗試將這兩個數組存儲到一個數組中時,分段錯誤作爲錯誤消息..我真的不知道如何將這兩個數組存儲到另一個,以便我可以按順序排序...我知道如何排序它我不知道如何將它們讀入另一個數組......我不能使用#DEFINE,因爲我要將所有這些寫入測試代碼的函數中......將字符串從文件存儲到數組

我有嘗試類似

new [i] = str;

也:

的strcpy(新[I],STR)

但無論這些工作...任何幫助將不勝感激......

這是我的代碼:

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

main (void) 
{ 
    char str[200]; 
    char str2[300]; 
    char new[300]; 
    char temp [300]; 
    int linenumber=0; 
    FILE *fa = fopen ("book1.dat", "r"); 
    FILE *fb = fopen ("book2.dat", "r"); 
    FILE *fc = fopen ("fixed.txt", "w"); 

    int i=0; 
    int j=0; 
    int k; 

    /*read the strings into an array while it is not the end of file*/ 
    while(!feof(fa)&& !feof(fb)) 
    { 
     linenumber++; 
     fscanf(fa,"%[^\n]\n",str); 
     fscanf(fb,"%[^\n]\n",str2); 

     /*compare strings in array and write to array*/ 
     if(strcmp(str2, str)<0) 
     { 
      fprintf(fc, "%s\n", str2); 
      fprintf(fc, "%s\n", str); 
     } 

     if (strcmp(str2,str)>0) 
     { 
      fprintf(fc, "%s\n", str); 
      fprintf(fc, "%s\n", str2) 
     } 

     /*print out the results of str */ 
     printf("%s", str); 
    } 
} 
+0

你是什麼意思*如何將這些讀入另一個數組* *?你想合併2個字符串嗎?你想要一串字符串嗎? – cnicutar

+0

是的,我正在嘗試將數組str和str2中的字符串放到數組中,以便我可以按字母順序對新數組中的所有字符串進行排序,但是我不知道如何將它們合併爲一個字符串數組... – user1385602

回答

0

Make new一個char *數組,並使用strdup來複制str中包含的字符串。

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

typedef char* Type; 

typedef struct vector { 
    size_t size; 
    size_t capacity; 
    Type *array; 
} Vector; 

Vector *vec_make(){ 
    Vector *v; 
    v = (Vector*)malloc(sizeof(Vector)); 
    v->size = 0; 
    v->capacity=16; 
    v->array=(Type*)realloc(NULL, sizeof(Vector)*(v->capacity *= 2)); 
    return v; 
} 

void vec_add(Vector *v, Type value){ 
    v->array[v->size] = value; 
    if(++v->size == v->capacity) 
     v->array=(Type*)realloc(v->array, sizeof(Vector)*(v->capacity *= 2)); 
} 

size_t vec_size(Vector *v){ 
    return v->size; 
} 

Type *vec_getArray(Vector *v){ 
    return v->array; 
} 

void vec_free(Vector *v){ 
    free(v->array); 
    free(v); 
} 

int cmp(const void *a, const void *b){ 
    return strcmp(*(char**)a, *(char**)b); 
} 

void merge(const char *inpfile1, const char *inpfile2, const char *outfile){ 
    FILE *fp; 
    char buff[256], **array; 
    Vector *v; 
    size_t c, size; 

    v = vec_make(); 
    fp=fopen(inpfile1, "r"); 
    while(NULL!=fgets (buff, 256, fp)) 
     vec_add(v, strdup(buff)); 
    fclose(fp); 

    fp=fopen(inpfile2, "r"); 
    while(NULL!=fgets (buff, 256, fp)) 
     vec_add(v, strdup(buff)); 
    fclose(fp); 

    array=vec_getArray(v); 
    size=vec_size(v); 
// qsort(array, size, sizeof(Type), cmp); 
    fp=fopen(outfile, "w"); 
    for(c=0;c < size; ++c){ 
     fputs(array[c], fp); 
     free(array[c]); 
    } 
    fclose(fp); 
    vec_free(v); 
} 

int main(){ 
    merge("book1.txt", "book2.txt", "fixed.txt"); 
    return 0; 
} 
相關問題