关于字符串搜索的应用技巧和strstr

举报
吴梦青 发表于 2022/06/13 21:50:06 2022/06/13
【摘要】 关于字符串搜索的应用技巧和字符串中找字符串函数的介绍。

找到目标字符前的那串子字符串

找到’l’,要’l’前的那段:用一个变量c,临时存储p,然后让p=‘\0’,然后去malloc一下s开头的字符串。把s开头的字符串拷贝给t。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
	char s[] = "hello";
	char *p = strchr(s, 'l');
	char c = *p;
	*p = '\0';
	char *t = (char *)malloc(strlen((s) + 1));
	strcpy(t, s);
	printf("%s\n", s);
	free(t);
	return 0;
}

分析:
s里包括:h,e,l,l,o,\0
strcpy找到了s字符串里的l
c=*p是让c指向p所指向的字符l
然后我们说P等于*** \ 0 ***
于是s所指的字符串只有he
然后把s字符串拷贝到t里面去。
//如果只是想输出目标字符前的字符串,做到前面就已经完成了,但是我们还可以把s恢复回来 :*p=c ;

字符串中找字符串:strstr

  • char * strstr(const char *s1,const char *s2);
  • strstr :在字符串中找一个字符串
  • char * strcasestr(const char *s1,const char *s2);
  • strcasestr : 在字符串中忽略大小写做一个查找
    好了,写道这里,关于字符串的相关函数和知识点我终于写完了。接下来,我就可以写点别的了。
    我去codeforces刷了一道题,刷的题是Theatre Square。

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Theatre Square in the capital city of Berland has a rectangular shape with the size n × m meters. On the occasion of the city’s anniversary, a decision was taken to pave the Square with square granite flagstones. Each flagstone is of the size a × a.

What is the least number of flagstones needed to pave the Square? It’s allowed to cover the surface larger than the Theatre Square, but the Square has to be covered. It’s not allowed to break the flagstones. The sides of flagstones should be parallel to the sides of the Square.

Input

The input contains three positive integer numbers in the first line: n,  m and a (1 ≤  n, m, a ≤ 109).

Output

Write the needed number of flagstones.

Examples

input

Copy

6 6 4

output

Copy

4
#include <stdio.h>

int main(int argc, char const *argv[]) {
	long long n, m, a;
	scanf("%lld%lld%lld", &n, &m, &a);
	printf("%lld", ((n + a - 1) / a ) * ((m + a - 1) / a));
	return 0;
}

题目分析:这个题目大概说的是一个长方形广场,长和宽分别是n和m,现在我们需要用正方形地板砖把他们铺满,正方形地板砖的边长是a。正方形地板砖不可以分开,也就是不能敲成一小块一小块的,东拼西凑这样的话是不行的,要求从左到右,一块一块的铺,小了就再铺一块,然后依次往下铺,铺到最后一行,如果小了的话也是继续用新的地板砖铺,就这样,把整哥广场铺满,问需要多少块瓷砖。
代码分析:因为n,m,a的长度的范围都在10^9之间,所以我们的数据类型需要用long long类型,对于n,我们铺的地板砖的长度肯定要大于n,所以是n-1+a的长度,在铺到最后一块砖不够的时候需要加上一个地板砖的长度,因为我们的地板砖是不允许分裂的。同理,对于宽,也是m-1+a的长度。把二者相乘就是铺的地板砖的面积,铺完地板砖了我们要求的是地板砖的个数,我们用地板砖的面积除以地板砖的边长,就得到了地板砖的个数了。
总结:这类问题还是要多思考多动脑。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。