上次看这本书已经不知道是什么时候了,最近翻看还是蛮有意思的,算法这种东西最好就是已玩的心态去学习或研究。不要太急功近利,或是为了
offer之类的,那种情况最好的办法是刷题,leetcode或者《剑指offer》,平时没什么事儿的时候可以随便拿个东西玩玩。
作者的意图是 sign -> sort-> squash
一开始没太看明白,其实sign这一步骤就是排下序,如果第一次遇到这个问题,可以不看书,自己估计一下,什么情况下bcda 和 adbc 可以相等,想
一下就是排序,也就是作者说的,标记。
sign代码如下
#include <stdio.h> #include <stdlib.h> #include <string.h> #define WORDMAX 100 int charcomp(const void *x,const void *y){ return *(char *)x - *(char *)y; } int main() { char word[WORDMAX], sig[WORDMAX]; while (scanf("%s", word) != EOF) { strcpy(sig, word); qsort(sig, strlen(sig), sizeof(char), charcomp); printf("%s %s\n", sig, word); } return 0; }
squash的代码如下
#include <stdio.h> #include <stdlib.h> #include <string.h> #define WORDMAX 100 int main(void){ char word[WORDMAX],sig[WORDMAX],oldsig[WORDMAX]; int linenum = 0; strcpy(oldsig,""); while(scanf("%s %s",sig,word)!=EOF){ if(strcmp(oldsig,sig)!=0 && linenum>0) printf("\n"); strcpy(oldsig,sig); linenum++; printf("%s ",word); } printf("\n"); return 0; }
sort在哪儿?
sort的代码已经封装好了,在控制台可以直接使用 也就是 sign < dic.txt | sort | squash > gramlist.txt
这里顺便说一下这个大于号 和 小于号 如果不用的话,sign 只是执行代码,输入部分默认从键盘输入,"<"的意思相当于dic.txt输入
同理,输出的时候。">"表示 “输出到” 的意思,如果不加的话,默认打印到屏幕。
linux中可以理解为一切都是文件,包括磁盘,屏幕,txt文档,只是指向不同,结果不同。
然后,就可以在gramlist文件中看到结论了。
其实一开始我一直在想sort的代码为什么木有,是我大意了,控制台试一下(path环境变量要配好,方便使用)
竟然windows也保留了man的用法, >>man sort会列出相应用法和参数。
今儿就写到这里,希望大家多多指正。
时间: 2024-10-13 16:52:33