洛谷入门5-字符串

字符串的使用方法https://www.cnblogs.com/lanclot-/p/11142202.html

string里的find方法:https://www.cnblogs.com/wkfvawl/p/9429128.html

一、笨小猴

解题:

# include<iostream>
# include<algorithm>
# include<cmath>
# include<string>
# include<cstring>
using namespace std;

char word[100];
int maxx=0,minn=100,sum[26]={0};
bool isprime(int n)//判断素数
{
    if(n<2)
    return 0;
    if(n==2)
    return 1;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        return 0;
    }
    return 1;
}
int main()
{
    cin>>word;
    int l=strlen(word);
    for(int i=0;i<l;i++)//遍历单词、字母加一
    {
        sum[word[i]-'a']++;
    }
    for(int i=0;i<26;i++)//遍历字母表,找出最多最少的字母
    {
        if(sum[i]>maxx)maxx=sum[i];
        if(sum[i]!=0&&sum[i]<minn)minn=sum[i];
    }
    int h=maxx-minn;
    if(isprime(h))
    {
        cout<<"Lucky Word"<<endl;
        cout<<h;
    }
    else if(!isprime(h))
    {
        cout<<"No Answer"<<endl;
        cout<<"0";
    }
    return 0;
}

 

二、标题统计

 

 

 解题:

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;

char s[100]={0};
int sum=0;
int main()
{
    /*gets(a)从标准输入设备读字符串函数,可以无限读取,以回车结束读取,a必须是字符型数组,strlen(a)记录a数组实际字符串长度*/
    gets(s);
    //统计标题字符
    for(int i=0;i<strlen(s);i++)
    {
        if(s[i]>='a'&&s[i]<='z')sum++;
        if(s[i]>='A'&&s[i]<='Z')sum++;
        if(s[i]>='0'&&s[i]<='9')sum++;
    }
    cout<<sum;
    return 0;
}

 

三、统计单词数

 

 例:输入一个句子,计算单词数

 

#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

int main()
{
    char a[100010]={0};
    int state,cnt=0;//空格状态为0,字母状态为1
    gets(a);//输入字符数组,包括空格
    if(a[0]==' ')state=0;//判断第一个的状态
    else state=1;
    for(int i=0;a[i];i++)
    {
        if(a[i]==' ')//是空格
        {
            if(state==1)//前一个状态是字母
                cnt++;
        }
        else//是字母
        {
            if(state==0)//前一个是空格就改变状态
                state=1;
        }
    }
    if(state==1)//最后一个是字母要加1
    {
        cout<<cnt+1;
    }
    else cout<<cnt;

    return 0;
}

本题题解:

# include<iostream>
# include<string>
using namespace std;


int main()
{
    string a;
    string b;
    getline(cin,a);//getline(cin,s)可以接受空格并输出,处于string流
    getline(cin,b);
    //输入的变为小写
    for(int i=0;i<a.length();i++){
        a[i]=tolower(a[i]);
    }
    for(int i=0;i<b.length();i++){
        b[i]=tolower(b[i]);
    }
    //字符串前后加空格,为了避免连在一起的字符串
    a=' '+a+' ';
    b=' '+b+' ';//防止单词出现在第一个和最后一个
    if(b.find(a)==string::npos){//找不到输出-1
        cout<<-1<<endl;
    }
    else
    {
        int pos1=b.find(a);
        int pos2=b.find(a);
        int sum=0;
        while(pos2!=string::npos)
        {
            sum++;
            pos2=b.find(a,pos2+1);
        }
        cout<<sum<<" "<<pos1;
    }
    return 0;
}

 

posted @ 2020-10-25 14:19  inss!w!  阅读(257)  评论(0编辑  收藏  举报