第一周ACM训练总结(偏日记向)

第一周的话没上课,只是在机房敲代码刷题,但是就算是这样氛围给我的感觉也很不一样。因为寝室的室友和周围认识的同学基本上的时间都是在玩游戏,很少去写代码去学习,当我处在这种氛围之中时我也感受到了紧迫感,我并不想成为最弱的那一个。
因为半年寒假都在玩,荒废学业,所以基础也比较差,所以决定从洛谷的入门题单开始刷起,刷的同时补充算法以及不懂的知识点,也想着早日可以追上来
刷基础题其实还好,目前刷到字符串题组了,里面遇见一题令我很是难受。

题目是洛谷里的: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值