题目描述:
思路:
1、首先判断一下,此字符是不是字母,因为题目给出有可能有空格的存在,如果是字母,全部变成小写字母,这样方便后面比较
2、把文章全部变为字符串,用字符串数组来存,字符串数组里存放的全是文章中的单词
3、记录第一次出现此单词的字符串数组的下标,和出现的次数
4、输出结果
代码中用到的函数:
isalpha():判断是否为字母字符
tolower() : 转换为小写字母,需要有变量进行接收。例如:str[i] = tolower(str[i]);
toupper():把字母转换成大写,需要有变量进行接收。例如:str[i] = toupper(str[i]);
isupper () : 判断是否为大写字母
AC代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e6+10;
string s[N];
int main()
{
string a,b;
getline(cin,a); //读入单词
getline(cin,b); //读入句子
int len_a = a.size();
int len_b = b.size();
for(int i=0;i<len_a;i++)
{
//判断一下当前字符是否为字符,是字符就统一变成小写
if(isalpha(a[i]))
{
a[i] = tolower(a[i]);
}
}
//同理
for(int i=0;i<len_b;i++)
{
if(isalpha(b[i]))
{
b[i] = tolower(b[i]);
}
}
int k = 0;
//把空格去掉(连成全字母句子),但是空格的位置算上一个位置
for(int i=0;i<len_b;i++)
{
if(b[i] == ' ')
{
k++;
continue;
}
s[k] = s[k] + b[i];
}
int cnt = 0,pos = -1;
for(int i=0;i<=k;i++)
{
if(s[i] == a)
{
if(pos==-1)
{
pos = i;//记录第一个出现一样的单词位置
}
cnt ++; //单词相等就+1
}
}
int num = 0;
//通过刚刚的字符串数组的下标去找首字母
for(int i=0;i<pos;i++)
{
num = num + s[i].size() + 1;
}
if(pos == -1) cout << -1;
else cout << cnt << ' ' << num << endl;
return 0;
}
此思路出自于一位大佬的博客,加上自己的理解,欢迎不会的小伙伴留言~