C语言如何对数组中的数据进行处理?

DN100 CDN_1 0 0 123
DN100 CDN_2 0 0 216
DN100 CDN_1 0 0 106
通过C语言如何得到下图所示
DN100 CDN_1 0 0 123
DN100 CDN_2 0 0 216
读取txt文件(多行多列)存入到数组中,把前两列相同的写到同一个数组中,通过第五列进行判断,大的输出,然后前两列不同的存入另外一个数组,最后再把这些数组依次输出?

第1个回答  2018-10-10
不知道你这个是一个编程题目,还是有数据要处理?

如果是前者,10000行以内的小规模用C语言处理还不难,大规模的话处理挺复杂的,不是三言两语可以说清楚的。
如果是后者,建议不要用C语言了,利用linux工具awk, sort等写个shell脚本非常方便的。本回答被网友采纳
第2个回答  2018-10-10
类似下面简单处理下
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

char record[100][5][16];
int cnt = 0;
#define IS_ALPHA(a) ((a >= 'a' && a <='z') || (a >= 'A' && a <='Z') || (a >= '0' && a <='9') || (a == '_'))
char* get_record(char* str) {
int i = 0, j = 0;
if (cnt >= 100) return NULL;
while (1) {
if (IS_ALPHA(*str)) {
if (j < 15)
  record[cnt][i][j++] = *str;
}
else {
if (j){
record[cnt][i][j++] = 0;
j = 0;
i++;
}
if (*str == 0 || i == 5) break;
    }
str++;
}
//add or not
if (i == 5){
int n = cnt;
for (i = 0; i < cnt; i++) {
if (strcmp(record[i][0], record[cnt][0]) == 0 && 
strcmp(record[i][1], record[cnt][1]) == 0 ) {
if (atoi(record[i][4]) < atoi(record[cnt][4])) {
strcpy(record[i][4], record[cnt][4]);
}
n--;
break;
}
}
cnt = n + 1;
    }
return (*str? str: NULL);
}

void print_record() {
int i;
for (i = 0; i < cnt; i++) {
printf("%s %s %s %s %s\n", 
record[i][0], record[i][1], record[i][2], record[i][3], record[i][4]);
}
}

int main(){
char str[] = "
DN100 CDN_1 0 0 123
DN100 CDN_2 0 0 216
DN100 CDN_1 0 0 106
DN100 CDN_3 0 0 106
DN100 CDN_3 0 0 107
DN100 CDN_2 0 0 218";
char* s = str;
while (s = get_record(s)) {}
print_record();
return 0;
}

追问

能不能用结构体数组去写,并且上述代码不能正常运行啊,谢谢!

相似回答