关于字符串搜索的应用技巧和strstr
找到目标字符前的那串子字符串
找到’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的长度。把二者相乘就是铺的地板砖的面积,铺完地板砖了我们要求的是地板砖的个数,我们用地板砖的面积除以地板砖的边长,就得到了地板砖的个数了。
总结:这类问题还是要多思考多动脑。
- 点赞
- 收藏
- 关注作者
评论(0)