C language program conjugation

Conjugation

topic

Insert picture description here

Code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
#define N 20
int main(int argc, const char * argv[]){
    FILE *fp;
    char fileName[N];
    char s[N];// 待比较的单词;
    char str[M][N];// 存储文件的单词
    char save[M][N];// v保存匹配上的单词
    char ch; // 文件读写的字符
    int i,j=0,m=0,n=0;
    printf("请输入单词\n");
    gets(s);
    // 输入的字符串转换字符串为小写
    for (i=0; s[i]!='\0'; i++) {
        if (s[i]>='A'&&s[i]<='Z') {
            s[i]=s[i]+32;
        }
    }
    printf("请输入文件名称\n");
    gets(fileName);
    if ((fp=fopen(fileName, "r"))==NULL) {
        printf("文件打开出错\n");
        return 0;
    }
    // 读写文件的数据 将文件写入字符数组中
    i=0;
    while (!feof(fp)) {
        ch=fgetc(fp);
        if (ch!=' '&&ch!='\t'&&ch!='\n') {
            if (ch>='A'&&ch<='Z') {
                ch=ch+32;
            }
            str[i][j++]=ch;
        }else{
            str[i][j]='\0';
            i++;
            j=0;
            n++;
        }
    }
//    寻找数组中的变位词,将其保存在数组save中
    int flag=0;
    for (i=0; i<n; i++) {
        flag=0;
        if (strlen(str[i])==strlen(s)) {
            for (j=0; str[i][j]!='\0'; j++) {
                flag=0;
                for (int k =0; s[k]!='\0'; k++) {
                    if (str[i][j]==s[k]) {
                        flag=1;
                        break;
                    }
                }
                if (flag==0) {
                    break;
                }
            }
        }
        if (flag==1) {
            strcpy(save[m++],str[i]);
        }
    }
    

    // 检测相同的数组变位词,即删掉相同的变位词
    char t[N];
    for (i=0; i<m; i++) {
        for (j=i+1; j<m; j++) {
            if (strcmp(save[i],save[j])==0) {
                save[j][0]='\0';
            }
        }
    }
    // 排序sava中的变位词,让其按字母升序保存。
    for (i=0; i<m; i++) {
        for (j=i+1; j<m; j++) {
            if (save[j][0]!='\0'&&save[i][0]>save[j][0]) {
                strcpy(t,save[i]);
                strcpy(save[i],save[j]);
                strcpy(save[j],t);
            }
        }
    }
   // 输出变位词
    for (i=0; i<m; i++) {
        if (save[i][0]!='\0') {
           puts(save[i]);
        }
    }
   return 0;  
}


effect

Insert picture description here
Insert picture description here

Guess you like

Origin blog.csdn.net/honeylife/article/details/103393694