什么叫变位词? least 和 tales是一对儿变位词,create 和 cater也是一对儿变位词!本程序是为了找出词典中的所有变位词!具体代码如下:
这段代码应该算是比较短的了,但这段确实不长的代码足足花了我两个晚上的时间!在编程的过程中遇到了一些平日里由于学习不扎实而引起的多个小问题,如char *类型的内存分配给遗漏了,以及函数strcpy使用时应该注意的问题还是没有完全掌握... ...

//用此题加深输入输出重定向的理解和应用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 100
#define MAX 100
//进行签名
int charcomp (const void * a, const void * b){
return ( *(char *)a - *(char *)b );
}
void sign(){
char word[MAX], sig[MAX];
freopen("F:\\SOURCE.txt", "r", stdin); //待查找变位词的文件【可以以一个字典中的所有单词为例】
freopen("F:\\STATION.txt", "w", stdout);
while(scanf("%s", word) != EOF){  //若没有分配空间就进行scanf,会有运行时错误
strcpy(sig, word);
qsort(sig, strlen(sig), sizeof(char), charcomp);
printf("%s %s\n", sig, word);
}
fclose(stdin);
fclose(stdout);
}
//进行排序
void bubsort(char * * a, char * * b, int length){//此函数中***处代码是为了,一旦判断出数组中元素全部排好序后,就停止循环,提高效率
int b1 = 0, b2 = length - 1; //b2为最大下标
int i, t;      //t为最后一次交换的位置
char * temp;
while(b1 < b2){
for(i = b1; i < b2; ++ i){ //大的往后(上)移
if(strcmp(a[i], a[i + 1]) > 0){
temp = a[i];  //改变的是指针而不是字符串的内容!这样效率高!
a[i] = a[i + 1];
a[i + 1] = temp;
t = i;
temp = b[i];
b[i] = b[i + 1];
b[i + 1] = temp;
}
}
b2 = t;
t = b1;   //***
for(i = b2; i > b1; -- i){ //小的往前(下)移
if(strcmp(a[i], a[i - 1]) < 0){
temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
t = i;
temp = b[i];
b[i] = b[i - 1];
b[i - 1] = temp;
}
}
if(t == b1){ //*** //全部已经排好序
b1 = b2;
}else{
b1 = t;
}
}
}
int sort(char * * ownsig, char * * ownword){  //排序用交替冒泡排序
int i = 0;
freopen("F:\\STATION.txt", "r", stdin);
while(scanf("%s %s", ownsig[i], ownword[i]) != EOF){
++ i;
}
//根据本题,自己定义的排序:bubsort,交替冒泡排序。主要是对sig进行排序
int length = i;
bubsort(ownsig, ownword, length);
fclose(stdin);
return length;
}
//进行挤压
char * squash(char * word, char * sig, char * oldsig){
if(strcmp(oldsig, sig) != 0 && strcmp(oldsig, "") != 0)
printf("\n");
strcpy(oldsig, sig);
printf("%s\t", word);
return oldsig;
}
int main(){
char * ownsig[NUM], * ownword[NUM];
int j;
for(j = 0; j < NUM; ++ j){
ownsig[j] = (char *)malloc(MAX * sizeof(char));
ownword[j] = (char *)malloc(MAX * sizeof(char));
}
char * oldsig = (char *)malloc(MAX * sizeof(char));
int length;
sign();       //void sign();
length = sort(ownsig, ownword); //int sort(char * * ownsig, char * * ownword)
strcpy(oldsig, "");    //若oldsig没有分配空间(赋没赋初值无所谓)则不能用strcpy赋值
freopen("F:\\DESTINATION.txt", "w", stdout);
//不断地进行循环调用squash函数
j = 0;
while(j < length){
oldsig = squash(ownword[j], ownsig[j], oldsig);//char * squash(char * word, char * sig, char * oldsig);
++ j;
}
printf("\n");
fclose(stdout);
for(j = 0; j < NUM; ++ j){
free(ownsig[j]);
free(ownword[j]);
}
free(oldsig);
return 0;
}

如果您对本博文有什么意见,欢迎您与我联系!【我的邮箱】: lxw0109@gmail.com

找出词典中的所有的变位词 --By LXW相关推荐

  1. 滑动窗口算法思想,找出字符串中的所有字母异位词

    力扣大神写的诗 一开始不理解滑动窗口是什么! 看完此诗我才明白,滑动窗口其实就是双指针的一种形式 左右指针齐头进. c#代码如下 public class Solution {public IList ...

  2. 每日一程-18.找出文件中元音为'aeiou'的单词

    Author: Notus(hehe_xiao@qq.com) Create: 2019-02-25 Update: 2019-02-25 找出文件中元音为'aeiou'的单词 环境 Python v ...

  3. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  4. 找出数组中重复的数字---多思路

    问题:找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意 ...

  5. 如何找出R中加载的软件包版本?

    本文翻译自:How to find out which package version is loaded in R? I am in a process of figuring out how to ...

  6. 找出重复的数java_剑指offer:1.找出数组中重复的数(java版)

    数组中重复的数: 题目:找出数组中重复的数, 题目描述: 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的. 也不知道每个数字重复几次.请找 ...

  7. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  8. 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    /**  * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素.  * 能够假定数组元素原先是按从小到大的顺序排列的.  */ /*** 思路:数组被 ...

  9. 找出数组中出现次数超过一半的数

    算法--找出数组中出现次数超过一半的数      每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学.      有空要看看高数啊,想当年数学那是相 ...

最新文章

  1. poj1426_模拟BFS
  2. RelationTrack解读
  3. 如何利用nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查
  4. 11.28 String类
  5. php抽象类初始化方法,php – 抽象类方法声明
  6. 决战EXCEL2010
  7. redis用zookeeper实现自动主从同步,切换
  8. Java并发编程之线程安全性
  9. 关于H3C-WAP712C AP的胖瘦切换说明
  10. 塔防游戏制作教程(二)
  11. 服务器显示无vga电缆怎么回事,无vga电缆是什么意思
  12. 学习 PixiJS — 动画精灵
  13. 知乎高赞 | 有没有适合XSh练习 Python 的做题类网站?
  14. 微软azure和亚马逊服务器,云计算两强,亚马逊AWS与微软Azure的差异!
  15. 2021电赛F题智能送药小车方案分析(openMV数字识别,红线循迹,STM32HAL库freeRTOS,串级PID快速学习,小车自动返回)
  16. 领英辅助工具领英精灵的下载安装的细节和方法
  17. 金蝶K/3 Cloud 实施笔记
  18. 参加百度深度学习培训总结
  19. vue.js——ElementUI表单向后台提交FormData数据
  20. 调试SI4432要点

热门文章

  1. 吴裕雄--天生自然 诗经:寻隐者不遇
  2. java xml格式验证_Java中对XML文件的校验
  3. 说说本人学习DirectX之路
  4. java实现北京地铁换乘
  5. 【机器学习】舍友居然偷偷在看这篇文章·入门机器学习
  6. Linux下__attribute__((aligned(n)))的使用
  7. 【英文美方阅读】之《The falling of the leaves》——《叶落》
  8. 数学之路(3)-数据分析(6)
  9. Redisson time out解决
  10. 给中国学生的第三封信:成功、自信、快乐