第一周的话没上课,只是在机房敲代码刷题,但是就算是这样氛围给我的感觉也很不一样。因为寝室的室友和周围认识的同学基本上的时间都是在玩游戏,很少去写代码去学习,当我处在这种氛围之中时我也感受到了紧迫感,我并不想成为最弱的那一个。
因为半年寒假都在玩,荒废学业,所以基础也比较差,所以决定从洛谷的入门题单开始刷起,刷的同时补充算法以及不懂的知识点,也想着早日可以追上来
刷基础题其实还好,目前刷到字符串题组了,里面遇见一题令我很是难受。
题目是洛谷里的:P1308,
s字符串是 给定单词
s1字符串是 给定文章
说下容易遇见的坑:
你不能直接去查找s1中是否有跟s相同大小的字串,如果查找成功计数器加1的话最后结果一定是不对的,举个例子:
这里用了substr函数去查找在s1中是否有与s相同的子串,如果有的话则计数器加1
但是这里s与s1的输入分别为:low与lower,这两个是不同的单词,但是计数器依旧+1,所以并不能这样做
解法
代码如下:
string xiaoxie(string s)//将全部字符转换为小写
{
for (auto i = 0; i < s.size(); i++)
{
s[i] = towlower(s[i]);
}
return s;
}
int main()
{
string s, s1;
getline(cin, s);
getline(cin, s1);
s = xiaoxie(s);
s = " " + s + " ";//头和尾增加空格字符
s1 = xiaoxie(s1);
s1 = " " + s1 + " ";
int cnt = 0, pos = -1;
for (int i = 0; i < s1.size(); ++i)//遍历s1字符串
{
if (s == s1.substr(i, s.size())) //如果长度相等
{
if (pos == -1)
{
pos = i;//存储首次出现的下标
}
++cnt;//出现次数+1
}
}
if (pos == -1)
{
cout << pos << endl;
}
else
{
cout << cnt << " " << pos << endl;
}
}
这一题前前后后写了将近有10个小时了吧,依旧是写不出(我太菜了),不得已还是参照着题解 再自己写了一边,总算过了。其实还是跟没有过一样,毕竟参照过题解。写上博客也算留个纪念吧,毕竟也写了特别久
下一周的目标:在巩固基础的同时学习C++的stl库,以及排序算法的应用。
2020/7/27