小平学英语

时间: 1ms        内存:128M

描述:

小平在读一篇英语文章时,发现有些句子里含有 don’t ,壮神告诉他这是英文do not的缩写,但小平不喜欢这种缩写,请帮助小平把句子中的该种缩写形式替换成非缩写形式。

以下给出部分代码实现,请提交缺少的代码。

#include <stdio.h>
#include <string.h>
#define MAXLEN 256
int main()
{
    char s1[MAXLEN],s2[MAXLEN]="";
    char *p1 = s1,*p2 = s2;
    void replace(char *src,char *dst);
    scanf("%[^\n]",s1);
    replace(p1,p2);
    printf("%s\n",s2);
    return 0;
}

输入:

含有或不含有缩写don’t的句子。

输出:

将所有缩写don’t全部展开后的句子。

示例输入:

Don't roar at me.They don't like reading.I don't like tea and coffe.

示例输出:

Do not roar at me.They do not like reading.I do not like tea and coffe.

提示:

参考答案(内存最优[0]):

#include <stdio.h>
#include <string.h>
#define MAXLEN 256
void replace(char *p1,char *p2)
{
	int i,j;
	for(i=j=0;i<=strlen(p1);i++,j++)
	{
		if((p1[i]=='D'||p1[i]=='d')&&p1[i+1]=='o'&&p1[i+2]=='n'&&p1[i+3]=='\''&&p1[i+4]=='t')
		{
			p2[j]=p1[i];
			p2[j+1]=p1[i+1];
			p2[j+2]=' ';
			p2[j+3]='n';
			p2[j+4]='o';
			p2[j+5]='t';
			i+=4;
			j+=5;
		}
		p2[j]=p1[i];
	}
}
int main()
{
    char s1[MAXLEN],s2[MAXLEN]="";
    char *p1 = s1,*p2 = s2;
    void replace(char *src,char *dst);
    scanf("%[^\n]",s1);
    replace(p1,p2);
    printf("%s\n",s2);
    return 0;
}

参考答案(时间最优[0]):


#include <stdio.h>
#include <string.h>
#define MAXLEN 256
int main()
{
    char s1[MAXLEN],s2[MAXLEN];
    char *p1 = s1,*p2 = s2;
    void replace(char *src,char *dst);
    scanf("%[^\n]",s1);
    replace(p1,p2);
    printf("%s\n",s2);
    return 0;
}
void replace(char *src,char *dst)
{
    int i,j = 0;
    for(i = 0; *(src+i)!='\0' && i<MAXLEN; i++,j++)
    {
		*(dst+j) = *(src+i);
        if((*(src+i)=='d'||*(src+i)=='D') && strncmp(src+i+1,"on't",4)==0)
        {
            strncpy(dst+j+1,"o not",5);	
            i+=4;
            j+=5;
        }            
    }
	*(dst+j)='\0';
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。