codevs 1131 统计单词数

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

int main() 
{
    string s, s0;
    getline(cin, s0);//short
    getline(cin, s);
    for (int i = 0; i < s.length(); i++)
        s[i] = tolower(s[i]);
    for (int i = 0; i < s0.length(); i++)
        s0[i] = tolower(s0[i]);
    int k1 = s.length();
    int k2 = s0.length();
    s = " " + s + " ";
    s0 = " " + s0 + " ";
    int pos = s.find(s0);
    int cnt = 0;
    int k =pos;
    while (k>0)
    {
        cnt++;
        k= s.find(s0, ++k);
    }
    if (!cnt)
        cout << -1 << endl;
    else
        cout << cnt << " " << pos<< endl;
}

题目解释:

匹配字符串位置与统计个数,就是要注意空格的处理

一个简单的字符串处理功能,但是自己基础不牢。很多地方做得迷糊了。

比如字符间间隔符号是空格,没想到可以在字符串首尾添加空格来处理。

还有就是while(k)的真假判断,只有k为0为假的,其他的,例如1或-1都会是为真的。

我判断到int k=s.find(s,++k).其实返回的是一个无穷大的数,int没法存,就是变成了-1.

另外注意的点:

getline(cin,str);

注意这个函数可以读取到回车结束,可以把空格也一起输入到字符串函数中。

原文地址:https://www.cnblogs.com/hxh88/p/9317144.html