天天看點

c語言-字元串比對

// 字元串查找_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;
}


           

繼續閱讀