// 字元串查找_while.cpp : 此檔案包含 "main" 函數。程式執行将在此處開始并結束。
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//第一種do while
int main01()
{
const char* p = "11abcd111122abcd333abcd3322abcd3333322qqq";
int n = 0;
do
{
p = strstr(p, "abcd");
if (p != NULL)
{
n++;//累計個數
//重新設定查找起點
p = p + strlen("abce");
}
else//如果沒有比對的字元串,跳出循環
{
break;
}
} while (*p != 0);//如果沒有到結尾
printf("n = %d\n", n);
//system("pause");
return 0;
}
//第二種while
int main02()
{
const char* p = "11abcd111122abcd333abcd3322abcd3333322qqq";
int n = 0;
while ((p = strstr(p, "abcd")) != NULL)
{
//能進來,肯定有比對的子串
//重新設定起點位置
p = p + strlen("abcd");
n++;
if (*p == 0)//如果到結束符
{
break;
}
}
printf("n = %d\n", n);
system("pause");
return 0;
}
//第三種方式-封裝函數
int my_strstr(const char *p, int *n)
{
//輔助變量
int i = 0;
const char *temp = p;
while ((temp = strstr(temp, "abcd")) != NULL)
{
//能進來,肯定有比對的子串
//重新設定起點位置
temp = temp + strlen("abcd");
i++;
if (*temp == 0)//如果到結束符
{
break;
}
}
//間接指派
*n = i;
return 0;
}
int main()
{
const char *p = "11abcd111122abcd333abcd3322abcd3333322qqq";
int n = 0;
int ret = 0;
ret = my_strstr(p, &n);
if (ret != 0)
{
return ret;
}
printf("n = %d\n", n);
return 0;
}