テキストの単語を正常に表示できます。 アルファベット順に並べ替えることはできません。Cプログラムで大きなテキストファイルとアルファベット順のクイックソートを読む
文字の文字の挿入方法myArray =(char)malloc(size);
これは私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
static int compare (const void * a, const void * b);
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
int size = 0;
fp = fopen("data.txt", "r");
if (fp == NULL)
printf("\nFile unable to open ");
else
printf("\nFile opened ");
fseek(fp, 0, 2); /* file pointer at the end of file */
size = ftell(fp); /* take a position of file pointer un size variable */
//char *myArray = (char*)malloc(size * sizeof *myArray);
char *myArray = (char*)malloc(size);
static const char filename[] = "data.txt";
FILE *file = fopen(filename, "r");
if (file != NULL){
int ch, word = 0, index= 0,index2 = 0;
while ((ch = fgetc(file)) != EOF){
if (isspace(ch) || ispunct(ch)){
if (word){
word = 0;
myArray[index++] = '\n';
//putchar('\n');
}
}else{
word = 1;
//putchar(ch);
myArray[index++] = ch;
index2++;
}
}
printf("%s", myArray);
fclose(file);
int i;
for(i = 0;i < sizeof(myArray);i++){
putchar(myArray[i]);
}
//qsort (array, 2, sizeof (const char *), compare);
//for (int i = 0; i < 2; i++) {
// printf ("%d: %s.\n", i, array[i]);
//}
}
}
static int compare (const void * a, const void * b)
{
return strcmp (*(const char **) a, *(const char **) b);
}
'sizeof'演算子を使用して、' malloc() 'によって割り当てられた配列の要素の数を決定することはできません。ちなみに、なぜコメント2に 'qsort()'の第2引数があるのですか?いくつかの16ビット環境では 'sizeof(myArray)'なので? – MikeCAT
2文字をchar配列に入れる前に、ハードコード2になるので、 実際には、データをchar配列にはっきりと記入する方法とサイズを取得する方法がわかりません。 – kennethk
コードを実行しようとするとどうなりますか?それはコンパイルエラー、ランタイムエラーまたは間違った結果を与えるか?後者の場合は、期待される出力と実際の出力を指定してください。 – anatolyg