446统计单词字数(因为一个stringstream,研究了半天)
题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。
样例
输入:To
to be or not to be is a question
输出:2 0
----------
#### C++ 代码
//此题主要包含以下几点考察点:
1、如何不区分大小写的识别单词(解决方法:通过输入时立马将其转化成小写,就可以识别了);
2、如果用getline(cin,b)来输入,如何将每个单词从一串字符串流中分离出来(解决方法:我最开始用的是stringstream,但是后来发现这个方法存在弊端,所以还是用一个while循环,定义一个string temp,当没遇到空格,就让temp+b[i]);
3、找到总共有多少个相同的单词怎么返回第一次出现的位置:让first=-1,只要first=-1代表是第一次出现的位置,则把当前位置赋给first,并输出
#### C++ 代码
#include<iostream>
#include<sstream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
string a,b;
int c[10000];
int d[10000];
cin>>a;
for(int i=0;i<a.size();i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
a[i]=a[i]+32;
}
}//把a转换成小写
getchar();
getline(cin,b);
string s;
for(int i=0;i<b.size();i++)
{
if(b[i]>='A'&&b[i]<='Z')
{
b[i]=b[i]+32;
}
}//把b转换成小写
string str;
int j=0,count=0,first=-1;
bool flag=false;
int k=0,p=0,len=0;
for(int i=0;i<b.size();i++)
{
string temp;
j=i;
if(b[i]==' ')
continue;//当前如果是空格,则跳过
while(j<b.size()&&b[j]!=' ')
{
temp=temp+b[j];
j++;
}//当没遇到空格,说明是一个单词中的字母,就把它和前面的组合在一起
if(temp==a)
{
count++;
if(first==-1) first=j-temp.size();//first=-1,则first=当前的位置
}
i=j;
}
if(first==-1)printf("-1\n");
else printf("%d %d\n",count,first);
return 0;
}