1. 程式人生 > 實用技巧 >洛谷入門5-字串

洛谷入門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;
}