《编程珠玑》--------变为词程序的实现

  上次看这本书已经不知道是什么时候了,最近翻看还是蛮有意思的,算法这种东西最好就是已玩的心态去学习或研究。不要太急功近利,或是为了

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

《编程珠玑》--------变为词程序的实现的相关文章

编程珠玑--变位词集合

有一步是必须处理的,就是对字符串进行排序: 第二步的方法就比较多:(1)采用字符串哈希(求值)(2)排序后转化为24位的位向量(3)直接排序后的字符串作为标识(书上的方法) 1 #include <iostream> 2 #include <string> 3 #include <fstream> 4 #include <map> 5 #include <algorithm> 6 #include <vector> 7 8 using

《编程珠玑》阅读小记(4) — 编写正确的程序

本章简述 本章的主题是编写正确的程序,以一个二分搜索算法引入. 关于二分搜索 二分搜索的关键思想是如果t在x[0..n-1]中,那么它就一定存在于x的某个特定范围之内.该程序最重要的部分是大括号内的循环不变式,也就是关于程序状态的断言. 代码的开发是自上而下进行的(从一般思想开始,将其完善为独立的代码行),该正确性分析则是自下而上进行的,从每个独立的代码行开始,检查它们是如何协同运作并解决问题的. 关于循环是程序中比较重要的部分,关于其正确性的讨论分为3个部分,每个部分都与循环不变式密切相关.

《编程珠玑》高清pdf版

下载地址:网盘下载 作者简介 编辑 Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joumal杂志的特约编辑,他的"编程珠玑"专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上. 目录 编辑 第一部分 基础 第1章 开篇 1.1 一次友好的对话 1.2 准确的问题描述 1.3 程序设计 1.4

《编程珠玑》

第1章 开篇 问题: 输入: 一个最多包含n个正整数的文件,每个数都小于n,其中n=107.如果在输入文件中有任何整数重复出现就是致命错误.没有其它数据与该整数相关联. 输出: 按升序排列的输入整数的列表. 约束: 最多有(大约)1MB的内存空间可用,有充足的磁盘存储空间可用.运行时间最多几分钟,运行时间10秒就不需要进一步优化了. 解决方案: 位向量     //phase 1:initialize set to empty         for i = [0,n)            

《编程珠玑》阅读小记(9) — 取样问题

问题 本章研究的问题是取样问题,也就是程序设计中的随机数,问题描述如下: 程序的输入包含两个整数m和n,其中 m < n:输出是0~n-1范围内m个随机整数的有序列表,不允许重复.从概率的角度看,我们希望没有重复的有序选择,其中每个选择出现的概率相等. 条件假设: 我们假设有一个能返回很大的随机整数(远远大于m 和 n )的函数bigrand(),以及一个能返回i-j范围内均匀选择的随机整数的randint(i,j). 本章关于这个问题提供了三种算法,接下来详细叙述每个算法的程序实现. 算法1

《编程珠玑》---笔记。浏览此文,一窥此书。

第一章: 磁盘排序:对于一个提出的问题,不要未经思考就直接给出答案.要先深入研究问题,搞清楚这个问题的特点,根据这个特点,可能有更好的解决方案. 比如:文中:最初的需求只是"我如何对磁盘文件排序". 我们首先想到了经典的归并排序. 但,进一步了解到排序的内容是10000000个记录,每条记录都是一个7位整数,且只有1M可用的内存.每条记录不相同. [位示图法,详见我的关于排序的博文] 第二章: 三个问题: 1.给定一个包含32位整数的顺序文件,它至多只能包含40亿个这样的整数,并且整数

【编程珠玑】【第一章】生成随机数、随机取样的问题

一.利用随机数函数生成随机数 问题1(<编程珠玑>习题12.1后半段): 给定一个rand(),可以产生从0到RAND_MAX的随机数,其中RAND_MAX很大(常见值:16位int能表示的最大整数32767),写出利用rand()生成[a,b]中任意整数的函数,其中a>=0, b<=RAND_MAX,且b-a<<RAND_MAX. 分析: 这是在编程工作最常见的随机函数的应用,在这里做一个起点再合适不过.把随机数区间的起点从0变为a,同时把一共RAND_MAX+1个数

【编程珠玑】【第二章】编程求解组合问题

组合问题 以下两个题目是等价的: 题目1:输入一个字符串,输出该字符串中字符的所有组合.举个例子,如果输入abc,它的组合有空.a.b.c.ab.ac.bc.abc. 题目2:打印一个集合所有的子集和,比如{a,b,c}的子集和有{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}以及空集{}. 方法一.递归求解给定集合的全组合n!. 之前我们讨论了如何用递归的思路求字符串的全排列,同样,本题也可以用递归的思路来求字符串的全组合. 1.算法思路: 具有三个元素的集合{a,b

编程珠玑 第2版 pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是计算机科学方面的经典名著.书的内容围绕程序设计人员面对的一系列实际问题展开.作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的.本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路.本书对各个层次的程序员都具有很高的阅读价值.. 多年以来,当程序员们推选