小壮的习惯

小壮的习惯

时间: 1ms        内存:128M

描述:

小壮是一个英语初学者,一天,逗比的小壮看英语书,被其中的句子吸引了。他有个习惯,他每次读完一句话都要把这句话抄下来并且记录某些字母、单词或者空格的个数,请你帮他解决这个问题吧。

输入:

输入一句英文和想要查找的单词、句子或者空格

输出:

输出小壮写下的字母(顺序输出)以及他想要查找的字母、单词、空格的个数

示例输入:

i am a boy
a

示例输出:

iamaboy
2

提示:

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

#include<stdio.h>
#include<string.h>
int main()
{
    char a[999],b[99];
    int i,t,j;
    int x=0;
    gets(a);
    gets(b);
    t=strlen(a);

    for(i=0;i<t;i++)
        if(a[i]!=' ')printf("%c",a[i]);
    if(strlen(b)<=1)
    {
        for(i=0;i<t;i++)
            if(a[i]==b[0])x++;
    }
    else
    {
        for(i=0;i<t;i++)
        {
            if(a[i]==b[0])
            {
                for(j=1;j<strlen(b);j++)
                {
                    if(a[i+j]!=b[j])break;
                    if(j!=strlen(b)-1)continue;
                    else if(j==strlen(b)-1&&a[i+j]==b[j])
                        x++;
                }
            }
        }
    }
    printf("\n%d",x);
    return 0;
}

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

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string str;//原字符串
	string _substr;//子字符串
	int cnt=0;	//记录字符串次数
	//接收输入字符串
	getline(cin,str);
	fflush(stdin);
	getline(cin,_substr);
	//计算字符串
	int index=0;
	for ( ; index!=str.size(); ++index)
	{
		int begin=0;
		if (str[index] == _substr[begin])
		{
			for (begin=1; begin!=_substr.size(); ++begin)
			{
				if (str[begin+index] != _substr[begin])
				{
					break;
				}
			}
			if (begin == _substr.size())
			{
				++cnt;
				index+=_substr.size()-1;
			}
		}

	}
	//输出string中的字母
	int i=0;
	for ( ; i!=str.size(); i++)
	{
		if (isalpha(str[i]))//判断字母
		{
			cout<<str[i];
		}
	}
	cout<<endl;

	//输出是否有子字符串
	if (cnt == 0)
	{
		cout<<"no substring."<<endl;
	}
	else
	{
		cout<<cnt<<endl;
	}

	return 0;
}

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

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注