Q1 字串取代
從命令列引數讀入引數,分別是要被取代的字串及要變成的字串。
/*
七題選六題 最後兩題20分
Q01
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
int main(int argc, char *argv[]) {
char *f = argv[1];
char *t = argv[2];
char *str = malloc(10101 * sizeof(char));
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
char *p = strstr(str, f);
while(p != NULL) {
while(str != p) {
printf("%c\n", *str++);
}
printf("%s", t);
str += strlen(f);
p = strstr(str, f);
}
while(*str != '\0') {
printf("%c", *str++);
}
printf("\n");
}
}
Q2
輸入postfix運算式,請輸出計算結果。
範例輸入:547 661 - 830 + 616 - 891 81 / 660 / 309 * +
範例輸出:100
/*
七題選六題 最後兩題20分
Q02
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
int isnum(char *str);
int cou(int n1, char *c, int n2);
int main() {
char *str = malloc(10101 * sizeof(char));
while(fgets(str, 10101, stdin)) {
int list[10101];
int ind = 0;
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
char *p = strtok(str, " ");
while(p != NULL) {
// printf("p: %s\n", p);
if(isnum(p)) {
// printf("Is number");
list[ind++] = atoi(p);
} else {
// printf("Not is number");
list[ind - 2] = cou(list[ind - 2], p, list[ind - 1]);
ind--;
}
p = strtok(NULL, " ");
}
printf("%d\n", list[0]);
}
}
int isnum(char *str) {
while(*str != '\0') {
if(!(*str >= '0' && *str <= '9')) {
return 0;
}
str++;
}
return 1;
}
int cou(int n1, char *c, int n2) {
switch(*c) {
case '+':
return n1 + n2;
case '-':
return n1 - n2;
case '*':
return n1 * n2;
case '/':
return n1 / n2;
}
return 0;
}
Q3 link list 新增及輸出
逐行讀入,並從頭輸出。
範例輸入:
W
S
N
N
E
範例輸出:
WSNNE
/*
七題選六題 最後兩題20分
Q03
Link list
- inser
- print
- clear
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TRUE 1
#define FALSE 0
typedef struct n {
char *str;
struct n *next;
} node;
node *insert(node *list, char *str);
void print(node *list);
void clear(node *list);
int main() {
char *str = malloc(10101 * sizeof(char));
node *head = NULL;
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
head = insert(head, str);
}
print(head);
printf("\n");
clear(head);
}
node *insert(node *list, char *str) {
if(list == NULL) {
node *n = malloc(sizeof(node));
n->str = strdup(str);
n->next = NULL;
return n;
}
list->next = insert(list->next, str);
return list;
}
void print(node *list) {
if(list == NULL) return;
printf("%s", list->str);
print(list->next);
return;
}
void clear(node *list) {
if(list == NULL) return;
clear(list->next);
list->str = NULL;
list->next = NULL;
free(list);
return;
}
Q4 Link list 反向輸出
/*
七題選六題 最後兩題20分
Q04
Link list
- inser
- print
- clear
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct n {
char *str;
struct n *next;
} node;
node *insert(node *list, char *str);
void print(node *list);
void clear(node *list);
int main() {
char *str = malloc(10101 * sizeof(char));
node *head = NULL;
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
head = insert(head, str);
}
print(head);
printf("\n");
clear(head);
}
node *insert(node *list, char *str) {
if(list == NULL) {
node *n = malloc(sizeof(node));
n->str = strdup(str);
n->next = NULL;
return n;
} else {
node *n = malloc(sizeof(node));
n->str = strdup(str);
n->next = list;
return n;
}
}
void print(node *list) {
if(list == NULL) return;
char p;
switch(*(list->str)) {
case 'N': p = 'S'; break;
case 'S': p = 'N'; break;
case 'E': p = 'W'; break;
case 'W': p = 'E'; break;
}
printf("%c", p);
print(list->next);
return;
}
void clear(node *list) {
if(list == NULL) return;
clear(list->next);
list->str = NULL;
list->next = NULL;
free(list);
return;
}
Q5 移除多餘空白字元
/*
七題選六題 最後兩題20分
Q05
String
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char *str = malloc(10101 * sizeof(char));
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
// char *temp = str;
int l = strlen(str) - 1;
for(int i = l; i >= 0; i--) {
if(str[i] == ' ') l--;
else break;
}
while(*str == ' ') {
str++;
l--;
}
int i = 0;
while(i <= l) {
if(str[i] != ' ') printf("%c", str[i]);
else {
if(str[i - 1] != ' ') printf(" ");
}
i++;
}
printf("\n");
}
}
Q6 BST
讀入資料,並輸出內容。
/*
七題選六題 最後兩題20分
Q06
BST
- search
- inser
- print
- clear
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct n {
char *str;
struct n *l;
struct n *r;
} node;
int search(node *list, char *str);
node *insert(node *list, char *str);
void pre_print(node *list);
void post_print(node *list);
void in_print(node *list);
void clear(node *list);
int main(int argc, char *argv[]) {
char c;
if(argc == 2) {
c = argv[1][1];
}
char *str = malloc(10101 * sizeof(char));
node *head = NULL;
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
if(*str == 'i') {
str += 2;
if(search(head, str)) {
//
} else {
head = insert(head, str);
}
}
else {
switch (c) {
case 'p':
pre_print(head);
break;
case 'P':
post_print(head);
break;
case 'i':
in_print(head);
break;
}
}
}
clear(head);
}
int search(node *list, char *str) {
if(list == NULL) return 0;
int c = strcmp(list->str, str);
if(c == 0 ) return 1;
else if(c > 0) return search(list->l, str);
else return search(list->r, str);
}
node *insert(node *list, char *str) {
if(list == NULL) {
node *news = malloc(sizeof(node));
news->str = strdup(str);
news->l = NULL;
news->r = NULL;
return news;
}
int c = strcmp(list->str, str);
if(c > 0) list->l = insert(list->l, str);
else list->r = insert(list->r, str);
return list;
}
void pre_print(node *list) {
if(list == NULL) return;
printf("%s\n", list->str);
pre_print(list->l);
pre_print(list->r);
return;
}
void post_print(node *list) {
if(list == NULL) return;
post_print(list->l);
post_print(list->r);
printf("%s\n", list->str);
return;
}
void in_print(node *list) {
if(list == NULL) return;
in_print(list->l);
printf("%s\n", list->str);
in_print(list->r);
return;
}
void clear(node *list) {
if(list == NULL) return;
clear(list->l);
clear(list->r);
list->str = NULL;
free(list);
return;
}
Q7 C qsort
/*
七題選六題 最後兩題20分
Q07
qsort
*/
#include<math.h>
#include<ctype.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct n {
char *str;
struct n *next;
} node;
int cmp(const void *a, const void *b);
int num_cmp(const void *a, const void *b);
int usenum = 0, re = 0;
int main(int argc, char *argv[]) {
char a;
if(argc >= 2) {
if(strlen(argv[1]) == 2) {
a = argv[1][1];
if(a == 'n') usenum = 1;
else if(a == 'd') re = 1;
else {
printf("usage: mysort [-dn]\n");
return 0;
}
} else {
printf("usage: mysort [-dn]\n");
return 0;
}
}
if(argc == 3) {
if(strlen(argv[2]) == 2) {
a = argv[2][1];
if(a == 'n') usenum = 1;
else if(a == 'd') re = 1;
else {
printf("usage: mysort [-dn]\n");
return 0;
}
} else {
printf("usage: mysort [-dn]\n");
return 0;
}
}
char *str = malloc(10101 * sizeof(char));
int i = 0;
node arr[22222];
while(fgets(str, 10101, stdin)) {
if(str[strlen(str) - 1] == '\n')str[strlen(str) - 1] = '\0';
node *news = malloc(sizeof(node));
news->str = strdup(str);
arr[i++] = *news;
}
if(usenum)
qsort(arr, i, sizeof(node), num_cmp);
else
qsort(arr, i, sizeof(node), cmp);
if(re) {
for(int j = i - 1; j >= 0; j--) {
printf("%s\n", arr[j].str);
}
} else {
for(int j = 0; j < i; j++) {
printf("%s\n", arr[j].str);
}
}
for(int j = 0; j < i; j++) {
free(arr[j].str);
free(arr[j].next);
}
}
int cmp(const void *a, const void *b) {
node *aa = (node *)a;
node *bb = (node *)b;
return strcmp(aa->str, bb->str);
}
int num_cmp(const void *a, const void *b) {
node *aa = (node *)a;
node *bb = (node *)b;
return atoi(aa->str) - atoi(bb->str);
}