Quiz 04
===
# [A]
[Quiz 03 [C] SubNetwork](https://hackmd.io/@nnyjan02426/cp2_quiz03#C-Subnetwork)
# [B] Pets
## Code
```c=
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *rPtr, *wPtr;
enum input_type{
BREED, ORIGIN, TYPE, BODY, COAT
};
struct pricing{
char name[100];
int price;
};
struct cat{
char *input_type[5];
int price;
};
int has_num(char *str);
int has_comma(char *str);
int str_to_int(char *str);
int in_string(char *str, char *find);
int main(){
char input[150];
enum input_type input_type = BREED;
struct pricing pricing[5][50];
int pricing_idx[5] = {0};
rPtr = fopen("test_input_Pets.txt", "r");
while(input_type <= COAT){
fgets(input, 150, rPtr);
input[strlen(input)-1] = '\0';
if(!has_num(input)){
input_type++;
}
else{
strcpy(pricing[input_type][pricing_idx[input_type]].name, strtok(input, ","));
pricing[input_type][pricing_idx[input_type]].price = str_to_int(strtok(NULL, ","));
//printf("%d ", pricing[input_type][pricing_idx[input_type]].price);
pricing_idx[input_type]++;
}
}
wPtr = fopen("my_output_Pets.txt", "w+");
fprintf(wPtr, "====================================================================================\n");
fprintf(wPtr, "Breed Origin Type Body Coat Price\n");
fprintf(wPtr, "------------------------------------------------------------------------------------\n");
struct cat cat;
char tmp_type[20];
while(!feof(rPtr)){
fgets(input, 150, rPtr);
if(has_comma(input)){
cat.price = 0;
cat.input_type[BREED] = strtok(input, ",");
for(enum input_type input_type=ORIGIN; input_type<=COAT; input_type++){
cat.input_type[input_type] = strtok(NULL, ",");
for(int i=0; i<pricing_idx[input_type]; i++){
if(in_string(cat.input_type[input_type], pricing[input_type][i].name)){
//fprintf(wPtr, "%d ", pricing[input_type][i].price);
cat.price += pricing[input_type][i].price;
break;
}
}
}
cat.input_type[COAT][strlen(cat.input_type[COAT])-1] = '\0';
fprintf(wPtr, "%-25s%-22s %-6c%-12s%-12s%5d\n", cat.input_type[BREED], cat.input_type[ORIGIN], cat.input_type[TYPE][0], cat.input_type[BODY], cat.input_type[COAT], cat.price);
}
}
fprintf(wPtr, "====================================================================================\n");
fclose(rPtr);
fclose(wPtr);
}
int has_num(char *str){
for(int i=0; i<strlen(str); i++){
if((str[i] == ',') && ((str[i+1] >= '0') && (str[i+1] <= '9'))){
return 1;
}
}
return 0;
}
int str_to_int(char *str){
int result = 0;
for(int i=0; i<strlen(str); i++){
if((str[i] > '9') || (str[i] < '0')){
return result;
}
result *= 10;
result += (int)str[i] - (int)'0';
}
return result;
}
int has_comma(char *str){
for(int i=0; i<strlen(str); i++){
if(str[i] == ','){
return 1;
}
}
return 0;
}
int in_string(char *str, char *find){
int found;
for(int i=0; i<strlen(str); i++){
if(str[i] == find[0]){
found = 1;
for(int j=1; j<strlen(find); j++){
if(str[i+j] != find[j]){
found = 0;
break;
}
}
if(found){
return 1;
}
}
}
return 0;
}
```
# [C] PetsTransaction
## Code
```c=
#include <stdio.h>
#include <stdlib.h>
enum data_type{
BREED, ORIGIN, TYPE, BODY, COAT
};
typedef struct{
char data_type[5][256];
unsigned int price;
}pet;
void sort(pet pets[]);
int compare(pet *pet1, pet *pet2);
int main(){
FILE *rPtr = fopen("test_input_PetsTransaction.txt", "rb");
pet pets[500];
fread(pets, sizeof(pet), 500, rPtr);
fclose(rPtr);
sort(pets);
FILE *wPtr = fopen("my_output_PetsTransaction.txt", "wb+");
fwrite(pets, sizeof(pet), 500, wPtr);
fclose(wPtr);
}
void sort(pet pets[]){
int largest_idx;
pet tmp;
for(int i=0; i<499; i++){
largest_idx = i;
for(int j=i+1; j<500; j++){
if(compare(&pets[largest_idx], &pets[j])){
largest_idx = j;
}
}
if(largest_idx != i){
tmp = pets[largest_idx];
pets[largest_idx] = pets[i];
pets[i] = tmp;
}
}
}
int compare(pet *pet1, pet *pet2){
for(enum data_type data_type=ORIGIN; data_type<=COAT; data_type++){
for(int i=0; i<256; i++){
if(pet1->data_type[data_type][i] != pet2->data_type[data_type][i]){
return pet1->data_type[data_type][i] > pet2->data_type[data_type][i];
}
}
}
for(int i=0; i<256; i++){
if(pet1->data_type[BREED][i] != pet2->data_type[BREED][i]){
return pet1->data_type[BREED][i] > pet2->data_type[BREED][i];
}
}
}
```
###### tags: `程設二quiz`