先看一道简单的题
统计子串
问题描述:
任意给定两个字符串str1与str2,str1与str2中可以包含任意字符。你的任务是统计字符串str2在str1中出现的次数。
如字符串str1为“asasasbbbasbas”,str2为“as”,则统计结果为5。注意如果字符串str1为“aaaaa”,字符串str2为“aaa”,则统计结果为3。

输入与输出要求:
输入两个长度不超过100的字符串,以换行符结束。输出统计次数,占一行。

程序运行效果:
dhd dhdhdfg dhd dh zx67 dhd mklodhdh↙
dhd↙

附上两种AC代码:
1. 普通类:

#include<cstring>
#include<cstdio>
int main(){
 int cnt = 0; 
 char s1[110], s2[110];
 gets(s1);
 gets(s2);
 int len1 = strlen(s1);
 int len2 = strlen(s2);
 for(int i = 0; i <= len1 - len2; i++){//注意 <= 
  int ok = 1;
  for(int j = 0; j < len2; j++)
   if(s2[j] != s1[j+i]){
    ok = 0; break;
   }
  if(ok) cnt++;
 } 
 printf(\"%d\", cnt);
 return 0;
}

2. 指针类:

#include<cstring>
#include<cstdio>
bool judge(char *, char *, int);
int main(){
 int len1, len2, cnt = 0; 
 char *p1, *p2;
 char s1[110], s2[110];
 gets(s1);
 gets(s2);
 len1 = strlen(s1);
 len2 = strlen(s2);
 for(int i = 0; i <= len1 - len2; i++){//注意 <= 
  p2 = s2;
  p1 = &s1[i];
  if(judge(p1, p2, len2)) cnt++;
 } 
 printf(\"%d\", cnt);
 return 0;
}
bool judge(char *p1, char *p2, int size){
 int ok = 1;
 while(*p1 == *p2){
  p1++;
  p2++;
  size--;
  if(!size) break;
 }
 if(size) return false;
 else return true;
}

指针变量: 专门用于存放另一变量内存起始地址的变量. 可以通过指针变量来访问其他变量.
指针运算符: &取变量的地址; *取指针所指变量的值; =指针的赋值运算.
指针作用: 在主调函数中, 将变量的地址作为实参传递给被调函数,然后在被调函数内部通过指针和和间接访问运算符 * 即可实现对这些变量的访问.

\"在这里插入图片描述\"

附上代码:

#include<cstdio>
#include<cstring>
int main()
{
 char *p = \"string\";
 for(int i = 0; i < 6; i++) printf(\"%c \", *(p+i));
 printf(\"\\n%s\", p); //p表示字符串首地址, 不加*
 return 0;
 } 

运行结果:
\"在这里插入图片描述\"
_____________________未完待续2018.12.20

收藏 打印