<NOIP> 18 . P1308 统计单词数
2017-06-30 15:34
281 查看
题解:这是洛谷的第18道题目,因为在很多文本编辑工具中都有查找的功能,也有计数的功能。所以,这方面的练习对于之后想做文本编辑器也是很有帮助的。
注意
1 . 我们在选择输入变量的类型时,应该不直接使用std::string,因为在输入的字符串中存在空格,std::string不识别空格,应该先用char作为输入,然后赋值给std::string;
2 . 字符串中,可能存在大写或者小写。因此,我们需要将大写或者小写的字符转换成统一格式;
3 . 匹配不到指定的字符串,输出-1;
源代码:
#include <iostream>
#include <string.h>
#include <sstream>
#include <stdlib.h>
using namespace std;
string transform(const std::string str)
{
string transformstr;
char *value = new char[1];
for (size_t i = 0; i < str.size(); i++)
{
strcpy(value, str.substr(i, 1).c_str());
transformstr += toupper(*value);
}
return transformstr;
}
int main()
{
string first, second, third = "", middle;
char c;
int sum = 0, pos;
bool firstpos = true;
cin >> first;
cin.get();
while ((c = cin.get()) != '\n')
second += c;
first = transform(first);
second = transform(second);
unsigned int stringsize = second.size();
for (size_t i = 0; i < stringsize; i++)
{
while (i<stringsize && (middle = second.substr(i, 1)) != " ")
{
third += middle;
i++;
}
if (first == third)
{
sum++;
if (firstpos)
{
pos = i - third.size();
firstpos = false;
}
}
third = "";
}
if (sum != 0)
cout << sum << " " << pos << endl;
else
{
sum = -1;
cout << sum << endl;
}
system("pause");
return 0;
}
注意
1 . 我们在选择输入变量的类型时,应该不直接使用std::string,因为在输入的字符串中存在空格,std::string不识别空格,应该先用char作为输入,然后赋值给std::string;
2 . 字符串中,可能存在大写或者小写。因此,我们需要将大写或者小写的字符转换成统一格式;
3 . 匹配不到指定的字符串,输出-1;
源代码:
#include <iostream>
#include <string.h>
#include <sstream>
#include <stdlib.h>
using namespace std;
string transform(const std::string str)
{
string transformstr;
char *value = new char[1];
for (size_t i = 0; i < str.size(); i++)
{
strcpy(value, str.substr(i, 1).c_str());
transformstr += toupper(*value);
}
return transformstr;
}
int main()
{
string first, second, third = "", middle;
char c;
int sum = 0, pos;
bool firstpos = true;
cin >> first;
cin.get();
while ((c = cin.get()) != '\n')
second += c;
first = transform(first);
second = transform(second);
unsigned int stringsize = second.size();
for (size_t i = 0; i < stringsize; i++)
{
while (i<stringsize && (middle = second.substr(i, 1)) != " ")
{
third += middle;
i++;
}
if (first == third)
{
sum++;
if (firstpos)
{
pos = i - third.size();
firstpos = false;
}
}
third = "";
}
if (sum != 0)
cout << sum << " " << pos << endl;
else
{
sum = -1;
cout << sum << endl;
}
system("pause");
return 0;
}
相关文章推荐
- <php>统计目录数和文件数
- 【NOIP2001提高组T3】统计单词个数-字符串上的动态规划
- <NOIP> 10 . P1423 小玉在游泳
- 【NOIP2001】统计单词个数
- noip2001 统计单词个数 (动态规划-划分)
- <HDU 2072> 单词数
- <NOIP> 21 . P1914 小书童——密码
- 【洛谷1026】【NOIP2001】统计单词个数
- <九度 OJ>题目1098:字母统计
- 【模拟】[NOIP2011普及组]统计单词数
- NOIP 2001 统计单词个数 解题报告
- <统计学习方法>5 逻辑斯蒂回归与最大熵模型
- [抄]NOIP 2001 统计单词个数
- <LeetCode> 题3:统计数字
- noip2011 统计单词数 (模拟)
- <NOIP> 12 . P1980 计数问题
- NOIP2011统计单词数
- hdoj 2082 找单词 <构造出了 --- 真正de母函数>
- 【模拟】[NOIP2011普及组]统计单词数
- Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)