Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX (75 + 1)
- int cmp(const void *a, const void *b){
- return strcmp(*(char **)a , *(char **)b);
- }
- int main(){
- const char separator[] = " ";
- char **name = NULL, buffer[MAX], *temp = NULL;
- int n_lines, i;
- //輸入行數
- scanf("%d", &n_lines);
- //讀取'\n'用
- getchar();
- //分配二維字元陣列空間
- name = (char **)malloc(n_lines * sizeof(char *));
- //分配每行字串陣列空間並將字串放入name
- for(i = 0; i < n_lines; i++){
- //對每個字元陣列控制分配長度
- name[i] = (char *)malloc(MAX * sizeof(char));
- //字串放入暫存
- gets(buffer);
- //利用strtok分割字串,將暫存的第一個單字取出
- temp = strtok(buffer, separator);
- //將temp放入
- strcpy(name[i], temp);
- }
- //快速排序函式
- qsort((void *)name, n_lines, sizeof(char *), cmp);
- for(i = 0; i < n_lines; i++){
- int counter = 0, j = i;
- //j從i到最後找排序後的字串陣列,直到出現不同字停止
- for(; j < n_lines; j++)
- if(!strcmp(name[i], name[j]))
- counter++;
- else
- break;
- printf("%s %d\n", name[i], counter);
- //因為j++所以指標調整為j - 1
- i = j - 1;
- }
- //釋放記憶體
- for(i = 0; i < n_lines; i++)
- free((void *)name[i]);
- free((void *)name);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement