题目描述:
思路:
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;
}
此思路出自于一位大佬的博客,加上自己的理解,欢迎不会的小伙伴留言~