单词复数 萌新求助 用c语言解决

单词复数。某单词本(文件)中有若干行单词单数形式,请在该单词后面给出单词复数形式,即单
词本中每一行是“单数 复数”形式。注:如果单词以 s、x、z、ch、或 sh 结尾,单词加 es;如果单词以 y 结
尾,并且 y 前面是一个辅音,将 y 改为 ies;对其他单词,后面加 s。
要代码,最好有备注

2个回答

适用于每行一个单词的情况

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE  1024

typedef enum
{
    WORDS_ADD_S = 0,
    WORDS_ADD_ES,
    WORDS_ADD_IES,
}words_add_enum;

char yuanyi_judge(char c)
{
    int i = 0;
    char yuanyin[] = {'a','e','i','o','u'};

    for(;i < strlen(yuanyin); i++)
    {
        if(c == yuanyin[i])
        {
        //  printf("是元音\n");
            return 1;
        }
    }

    //printf("不是元音\n");
    return 0;
}

//判断末尾是否需要加es,last 最后一个单词,second 倒数第二个单词
char words_is_nedd_add_es(char last,char second)
{
    char res = 0;

    if(last == 'h')
    {
        if(second == 'c' || second == 's')
        {
            res = 1;
        }
    }
    else if(last == 's' || last == 'x'|| last == 'z')
    {
        res = 1;
    }
    else
    {
        res = 0;
    }

    //printf("末尾需要加es吗:%s\n",res == 1 ? "yes":"no");
    return res;
}

char data_combin(char *src,FILE *save)
{
    int data_len = 0;
    char *temp = NULL;
    words_add_enum words_add = WORDS_ADD_S;
    if(!src || !save)
    {
        //printf("%s,参数为空\n",__FUNC__);
        return 0;
    }



    data_len = strlen(src) ;
    //数据长度不含换行符
    if(src[data_len - 1] == '\n')
    {
        src[data_len - 1] = '\0';
        data_len -= 1;
    }

    ///拷贝单词
    temp = (char *)malloc(data_len + 1);
    strcpy(temp,src);

    if(data_len <= 1)
    {
        printf("单词无复数,原样输出\n");
        fputs(src,save);
        fputs("\n",save);
    }
    else
    {
        if(src[data_len -1] == 'y')
        {
            //是元音,加s
            if(!yuanyi_judge(src[data_len -2]))
            {
                words_add = WORDS_ADD_IES;
            }       
        }
        else if(words_is_nedd_add_es(src[data_len -1],src[data_len -2]))
        {
            words_add = WORDS_ADD_ES;
        }

        //src[data_len-1]='\0';
        if(words_add == WORDS_ADD_ES)
        {
            sprintf(src + data_len," %s%s\n",temp,"es");
        }
        else if(words_add == WORDS_ADD_IES)
        {
            sprintf(src + data_len," %s",temp);
            //去掉y
            sprintf(src + strlen(src) - 1 ,"%s\n","ies");
        }
        else
        {
            //sprintf(src + data_len," %s%s",src,"s");
            sprintf(src + data_len," %s%s\n",temp,"s");

        }

        ///不会自动输出换行
        fputs(src,save);

    }
    //释放内存
    free(temp);
    printf("复数%s\n",src);

    return 1;
}

//in_path 数据原始文件,out_path 转换后保存的文件
void words_convert(char *in_path,char *out_path)
{
    FILE *fp = NULL;
    FILE *fp_save = NULL;
    int num = 0;
    //char *temp_path = "./temp.txt";
    char buf[BUFFER_SIZE] = {0};

    if(!in_path || !out_path)
    {
        return ;
    }

    if((fp = fopen(in_path,"r")) == NULL)
    {
        printf("读取数据文件失败\n");
        return ;
    }

    if((fp_save = fopen(out_path,"w")) == NULL)
    {
        printf("创建临时数据文件失败\n");
        return ;
    }

    while(!feof(fp))
    {
        memset(buf,0,BUFFER_SIZE);
        if(!fgets(buf,BUFFER_SIZE,fp))
        {   
            printf("读取数据文件出错\n");
            return;
        }

        data_combin(buf,fp_save);
    }

    fclose(fp);
    fclose(fp_save);


}

//函数适用用每行一个单词的情况
void main(void)
{
    words_convert("words.txt","temp.txt");

    system("pause");
}

如果问题得到解决,请点我回答左上角的采纳,采纳后可以回答你的别的问题

char word[200];
scanf("%s", word);
int n = strlen(word);
if (word[n - 1] == 's' || word[n - 1] == 'x' || word[n - 1] == 'z')
{
word[n] = 'e';
word[n + 1] = 's';
word[n + 2] = '\0';
}
else if (n >= 2 && word[n - 1] == 'h')
{
if  (word[n - 2] == 'c' || word[n - 2] == 's')
{
word[n] = 'e';
word[n + 1] = 's';
word[n + 2] = '\0';
}
else
{word[n]='s';word[n+1]='\0';}
}
else if (n >= 2 && word[n - 1] == 'y')
{
if (word[n - 2] != 'a' && word[n - 2] != 'e' && word[n - 2] != 'i' && word[n - 2] != 'o' && word[n - 2] != 'u')
{
word[n - 1] = 'i';
word[n] = 'e';
word[n + 1] = 's';
word[n + 2] = '\0';
}
else
{word[n]='s';word[n+1]='\0';}
}
else
{word[n]='s';word[n+1]='\0';}
printf("%s", word);
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言萌新求助
这二个程序有问题吗?需要改进不?[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img]
c语言萌新求助
c语言求助 #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;ctype.h&amp;gt; int main(void) { int sum=0; char c; printf(&quot;Enter a word: &quot;); getchar() while (getchar()!='\n') { c=getchar(); c=toupper(c...
萌新c语言
//1 #include&amp;lt;iostream&amp;gt; using namespace std; int main() { int a, b, c, d; while (cin &amp;gt;&amp;gt; a &amp;gt;&amp;gt; b &amp;gt;&amp;gt; c &amp;gt;&amp;gt; d) { float s = sqrt(pow(a - c, 2) + pow(b - d, 2)); printf(&quot;%...
C语言萌新求助(初学者)
for ( int i=10; i> 1; i /=2 ) n printf("%d ", i++);nn这个程序为什么输出结果是10 5 3 2呢?n不应该是10 5 2吗?5/2之后等于2.5 因为是int所以直接变成2 迷茫了
c语言解决,萌新求助 两个一元多项式相加
两个一元多项式相加。输入 2 个多项式,例如 A17(x)=7+3x+9x8 +5x17 和 B8(x)=8x+22x7- 9x8 ,得到 C17(x)=7+11x+22x7 +5x17。rn做不出来所以希望有代码
萌新C语言【2】
萌新C语言【2】 问题是输入a,n的值计算n个数字的和sn sn=a+aa+aaa+aaaa+… C语言代码如下: #include&lt;stdio.h&gt; #include&lt;math.h&gt; int main() { int a,n,sum,sn,c; sn=0; /*赋予sn初值*/ printf("请输入a的值和n的值:\n"); scanf("...
萌新求助
做了一个小应用,添加和显示所有商品都可以正常,想做一个搜索,输入药品名称,显示出来该药品及所有信息,但是一直不出来数据,实在找不到问题了,求各路大神相助。我把代码贴出来请大家看看 。rn[img=https://img-bbs.csdn.net/upload/201704/05/1491367984_140598.png][/img][img=https://img-bbs.csdn.net/upload/201704/05/1491367994_971762.png][/img][img=https://img-bbs.csdn.net/upload/201704/05/1491368002_912104.png][/img][img=https://img-bbs.csdn.net/upload/201704/05/1491368012_793916.png][/img][img=https://img-bbs.csdn.net/upload/201704/05/1491368082_797034.png][/img][img=https://img-bbs.csdn.net/upload/201704/05/1491368091_760945.png][/img]rnrnrnrn跪求
数据库萌新求助!!!!
在实习中遇到的问题,数据库查询操作中 如何查询一张表中指定的几个记录(不连续,不关联)
大一萌新求助!!!
有无适合做大一课程设计的小型软件程序 各种类型皆可 向各位大佬求助 0.0rn大一上学期学了C++ rn抱拳啦~~
python萌新求助
如果我要使用python语言构建一个界面(在界面里需要设置一些按钮,能够实现图像的读取,并进行图像的旋转,裁剪等功能,)我需要什么module,需要掌握哪些方面的知识,如何才能快速了解和使用这些,求助大佬
萌新求助啊!!
哪位好心人帮我看看,这代码到底是哪出问题了?rn[img=https://img-bbs.csdn.net/upload/201906/03/1559542585_317507.png][/img][face]qq:54.gif[/face]
萌新求助T_T
目前在用jsp做一个web项目 rn找了一个拥有jquery特效的html页面 rn我把这个页面改成了jsp,然后放到项目中的时候,此页面引用的一个js文件报错rnrn原jsrn[img=https://img-bbs.csdn.net/upload/201803/14/1521041231_522589.png][/img]rncopy到myeclipse的js文件rn[img=https://img-bbs.csdn.net/upload/201803/14/1521041256_720753.png][/img]rnrn报错信息为rnSyntax error on tokens, they can be merge to form (rnrn第一次发帖 目的是想知道一下几个问题rn1.html网页能不能改成jsprn2.如果能,怎么把html网页改成jsprn3.关于js文件报错是因为什么,怎么改rnrn萌新第一次发帖,希望叙述问题和提问有什么问题各位大牛能谅解rn特别希望有大牛能回答一下我的问题rn在此留下qq 9876909 万谢!rn
WPF萌新求助
[img=https://img-bbs.csdn.net/upload/201712/18/1513607241_688636.png][/img]rn[img=https://img-bbs.csdn.net/upload/201712/18/1513607250_376732.png][/img]rn我该怎么实现上面两个图中,中间那个可编辑文档的效果呢,看上去是个window控件,但是不能添加window。
萌新求助!!!!!
[b]以下两个程序是为了实现同一个问题(随意输入一串字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。)rn第一个程序比第二个程序多用了一个函数库ctype.h 但是结果却把所有的字符归为其他字符,第二个程序比第一个复杂一些,但是却能实现所想要的功能!求大佬们解答!!rn[/b][color=#000000][/color]rn第一个程序:rn#include rn#include rnmain()rnint zm=0,space=0,sz=0,other=0;rn char ch;rn ch=getchar();rn while(ch!='\n')rn rn if(isalpha(ch)==1) rn zm++;rn else if(isspace(ch)==1)rn space++;rn else if(isdigit(ch)==1)rn sz++;rn else other++;rn ch=getchar();rn rn printf("zm=%dspace=%dsz=%dother=%d\n",zm,space,sz,other);rnrn rnrn第二个程序:#include rnmain()rnint letter=0,space=0,digit=0,other=0;rnchar ch;rnch=getchar();rnwhile(ch!='\n')rnif(ch>='0'&&ch<='9') digit++; //数字 rn else if(ch==' ') space++; //空格 rn else if (ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') letter++; //字母 rn else other++;rn ch=getchar();rnrnprintf("letter=%d,space=%d,digit=%d,other=%d\n",letter,space,digit,other);rn
ZigBee萌新求助。。
接触ZigBee有三个多月,懵懵懂懂跟着也做了一些实验,但是一到自己动手来做一个整合的项目就有点不知道从何下手,翻看书本上的项目代码,觉得很多都是没看到过的,好庞大的代码啊。。。想问问ZigBee大神们怎么过来的。。真心有点迷茫QAQ,应该怎么一步一步来好
萌新求助sublimetext3
为什么我的代码没颜色
萌新求助!!!
[face]qq:54.gif[/face]明明是按照教程来的啊,怎么就成这样了,我这是哪出问题了??rn[img=https://img-bbs.csdn.net/upload/201906/03/1559547191_536992.png][/img][img=https://img-bbs.csdn.net/upload/201906/03/1559547191_747462.png][/img]
c语言萌新有问题求解
程序如下rn#includernfun (char m[][10]) printf("%s\n",m+1); rnvoid main ()rn char a[3][10]= "BASIC","FOXPRO","C";rn fun(a);rnrn请问输出结果是啥啊?还有如何求解,谢谢路过大佬帮忙解答rn
萌新求教一些C语言问题
萌新自学C 想用strcmp()函数比较两个字符串是否一样 来写一个登录系统 如果输入正确就进入系统 但是strcmp的返回值一直是1 不知道出什么问题了 求各位大神给看一下谢谢!rn[code=c]rn#include rn#include "s_gets.h"rn#include rn#define FG "*****************************"rnvoid sr(void);rnvoid yz(char *zh,char *mima);rnint main(void)rnrn printf("%s\n", FG);rn printf("%s\n", "欢迎使用登录系统!");rn printf("%s\n", FG);rn sr();rnrnvoid sr(void)rnrn char zh[30];rn char mima[30];rn const char zhanghao[30] = "cuihe500" ;rn const char zmima[30] = "870219176" ;rn printf("请输入账号:");rn while (fgets(zh, 30, stdin) == NULL)rn rn fputs("输入错误,请检查后重新输入!", stdout);rn rn printf("请输入密码:");rn while (fgets(mima, 30, stdin) == NULL)rn rn fputs("输入错误,请检查后重新输入!", stdout);rn rn yz(zh, mima);rnrnrnvoid yz(char *zh, char *mima )rnrn const char zhanghao[30] = "cuihe500" ;rn const char zmima[30] = "870219176" ;rn int a, b;rn if (a=strcmp(zhanghao,zh))rn rn printf("不存在的用户名!请检查后重新输入!\n");rn fputs(zh, stdout);rn printf("%d\n", a);rn sr();rn rn else if (b=strcmp(mima, zmima))rn rn printf("密码错误!请重新输入\n");rn fputs(mima, stdout);rn printf("%d\n", b);rn sr();rn rn printf("登录成功!欢迎使用该系统!");rn getchar();rnrn[/code]
C语言萌新,求指点
C语言新手,用单循环链表写约瑟夫环问题,但老是遇到这种情况 以下为源代码`#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;malloc.h&amp;gt; typedef struct node { int num; int password; struct node *next; }Lnode; Lnode t; voi...
萌新,c语言 倒序去重输出
如题,倒序后去掉重复的字符输出。包括空格字符也算入在内,而且不能输出重复的字符。n比如abs a wr 输出rw asb
萌新求助C语言大一新生问题(数组)
从键盘输入一个3*3的二维数组,求出该二维数组中的最大数与最小数及其所在位置(第几行第几列)rn小生绞尽脑汁写了一串代码max的值算得出来,可是min的值却计算不出rn查了一下午的错,还是没找出来rn跪求大神帮帮忙康康rn[code=c]#includernint main()rnrn int i,j,a[3][3],max=0,min=0,line1,row1,line2,row2;rn for(i=0;i<3;i++)rn rn for(j=0;j<3;j++)rn rn scanf("%d",&a[i][j]);rn rn rn for(i=0;i<3;i++)rn rn for(j=0;j<3;j++)rn rn if(maxa[i][j])rn rn min=a[i][j];rn line2=i+1;rn row2=j+1;rn rn rn rn printf("max=%d,%d,%d\n",max,line1,row1); rn printf("min=%d,%d,%d\n",min,line2,row2);rn[/code]rn输出结果如下图rnrnrn[img=https://img-bbs.csdn.net/upload/201905/14/1557830577_476612.png][/img]rn新手只有50分了,都拿去吧QAQrn
C语言萌新求助fgets函数的问题
[code=c]#includernrnint main(void)rnrn char temp[5];rnrn fgets(temp, 5, stdin);rn printf("%s", temp);rnrn return 0;rn[/code]rnvs2017 win10系统rn情况1.输入a按下回车,在temp里是'a','\n'和'\0'rn情况2.输入a和CTRL+Z,按两下回车,在temp里会有'a','\x1a','\n'和'\0'。rnrn问题1. ctrl+Z不是文件结束符么,为什么在情况2中还会读取‘\n'?rn问题2. 为什么在情况2中需要两次回车?rn问题3. 我看的一篇文章(http://blog.csdn.net/ccshijtgc/article/details/24033991)中说阻塞式和非阻塞式的区别,我发现ctrl+D和Z都能用,temp中数据也不一样,不同的是在情况2中如果按下的是D,那么按一次回车就可以结束输入,只是输出的时候会有个方框,D和Z为什么会有不一样的效果,并且都是按下回车才结束输入那么应该都是阻塞式?
单词接龙C语言解决
单词接龙 描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。 输入 每个测试文件只包含一组...
C语言复数库
实用的C语言复数库 可以在C99标准中调用的简单复数运算及操作
C语言 求复数和
/*1.编程求两个复数的和 结构体 函数 返回值是结构体 参数 两个结构体 */ #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; struct Complex { int R; int I; }; struct Complex* Add(const struct Complex *x, const struct Comple...
C语言复数计算器
C语言编写的复数计算器,用结构体存储复数的实部和虚部,供大家作为数据结构课程实验的参考~!确定能运行通过的~
C语言 复数四则运算
#include&lt;stdio.h&gt; #include&lt;math.h&gt; struct st_1{ float a,b,c,d; }stu_1; struct st_2{ float shi,fu; }stu_2; void soild_jia(struct st_1 m,struct st_2 n) { n.shi=m.a+m.c; n.fu=m....
萌新求助,裸机问题
操作系统课设,想实现能在裸机运行的简易小操作系统,怎么实现裸机环境呢,是用虚拟机实现吗,可是用虚拟机不是也要选系统吗,真的萌新,求大佬解释
链表问题,萌新求助
[img=https://img-bbs.csdn.net/upload/201604/10/1460300246_929218.png][/img]#includern#includerntypedef struct Nodern char stuName[10];rn int age;rn struct Node *next;rn struct Node *pre;rnListNode, *ListPtr;rnListNode *head1,*head2,*head3;rnrnListPtr List_Init1()rnrn head1= (ListNode *)malloc(sizeof(ListNode));rn if (head1 == NULL)rn rn printf("申请空间失败!");rn exit(0);rn rn head1->next = NULL;rn ListNode *tail = head1;rn int num;rn int iCount = 1;rn while (1)rn rn ListNode *p;rn p = (ListNode *)malloc(sizeof(ListNode));rn if (p == NULL)rn rn printf("申请空间失败!");rn exit(0);rn rn printf("请输入第%d个学生的姓名:", iCount++);rn scanf("%s", p->stuName);rn printf("请输入该学生的年龄:");rn scanf("%d", &p->age);rn p->next = NULL;rn tail->next = p;rn tail = p;rn printf("继续输1,退出输0:");rn scanf("%d", &num);rn if (num == 0)rn break;rn rn return head1;rnrnrnrnListPtr List_Init2()rnrn head2 = (ListNode *)malloc(sizeof(ListNode));rn if (head2 == NULL)rn rn printf("申请空间失败!");rn exit(0);rn rn head2->next = NULL;rn ListNode *tail = head2;rn int num;rn int iCount = 1;rn while (1)rn rn ListNode *p;rn p = (ListNode *)malloc(sizeof(ListNode));rn if (p == NULL)rn rn printf("申请空间失败!");rn exit(0);rn rn printf("请输入第%d个学生的姓名:", iCount++);rn scanf("%s", p->stuName);rn printf("请输入该学生的年龄:");rn scanf("%d", &p->age);rn p->next = NULL;rn tail->next = p;rn tail = p;rn printf("继续输1,退出输0:");rn scanf("%d", &num);rn if (num == 0)rn break;rn rn return head2;rnrnrnrnListPtr Merge()rnrnrn ListNode*p1, *p2,*p3;rn p1 = head1->next;rn p2 = head2->next;rn head3 = head1;rn p3 = head3;rn while ((p1 != NULL) && (p2 != NULL))rn rn if (p1->age <= p2->age)rn rn p3->next = p1;rn p3 = p1;rn p1 = p1->next;rn rn elsern rn p3->next = p2;rn p3 = p2;rn p2 = p2->next;rn rn rn if (p1 != NULL) p3 = p1->next;rn else p3 = p2->next;rn free(p2);rn return head3;rnrnrnrnvoid show()rnrn ListPtr p = head3->next;rn while (p != NULL)rn printf("%s/%d\n", p->stuName, p->age);rn p = p->next;rn rnrnrnint main()rnrn List_Init1();rn List_Init2();rn show();rn return 0;rn
无关技术,一个萌新的求助!
n如题所见,楼主是一个即将踏上社会的萌新,大学学习的是软件工程专业,是个混子,混了快两年了,前短时间幡然悔悟,开始埋头苦学,现在也快学习了六个月的java了,网投找到了一家实习公司开始了美滋滋的实习生活,可是问题就出在这里了,我在的项目组现在正在赶项目,虽然进到公司的时候安排了带我学习的老师,但是他们都特别忙,问他们问题也没法说的很详细,只是说的云里雾里的,只得自己摸索,也没给我什么学习的资料,就是让我看一看项目代码,两周后就让我学着写代码了,可是我感觉什么都没有学到,和刚来实习的时候差不多而和我一起的人现在学springmvc,node.js什么的,自己就没有学到写实际的。有点郁闷,想问问大牛实习是不是都这样的是不是都是这样的,还是本人的学习方法出问题了?
练习受挫,萌新求助
具体就是下面这段,返回值始终是0,请各位大佬帮忙看看是哪里有问题,万分感谢!!rn[code=c]const int CM2M = 100;rnint main()rnrn using namespace std;rn int CM;rn float M = CM / CM2M + (CM % CM2M) * 0.01f;rnrn cout << "Enter the height in CM: ";rn cin >> CM;rn cout << "Your in M is " << M << endl;rn return 0;rn[/code]
用c语言实现复数的加减运算及复数的显示
#include&amp;lt;stdio.h&amp;gt; int main(void) { int a[2],b[2],c[2],d[2];//存储实部肯虚部和结果 printf(&quot;请输入第一个复数的实部和虚部:\n&quot;); scanf(&quot;%d%d&quot;,&amp;amp;a,&amp;amp;b); printf(&quot;您输入的复数为%d+%di\n&quot;,a[0],b[0]); printf(&quot;请输入第二个复数...
用C语言实现复数的四则运算
学校数据结构的实验,做出的能够完美的运行复数的加减乘除
用C语言实现复数的运算
用C语言实现复数的运算,在运算中利用结构体,来实现实部和虚部进而完成运算
用C语言编写实现复数的加减法
用C语言编写实现复数的加减法。急
用C语言实现复数相加和相乘
复数的相乘加 用c语言实现的 读者们可以相互交流交流 本来是一个小程序,还要写这么多介绍,我看实在是没有必要
复数的运算和分离 用C语言写的
复数的加减 运算 构建 和分离 用C语言写的
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件