Loading

项目开发常用字符串应用模型


返回 我的技术栈(Technology Stack)



strstr中的while和do-while模型

利用strstr标准库函数找出一个字符串中substr出现的个数。

while模型

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


int main(void)
{
	char str[] = "11abcd111122abcd333abcd3322abcd3333322qqq";
	char* p = str;
	int n = 0;

	while ((p = strstr(p, "abcd")) != NULL)
	{
		//能进来,肯定有匹配的子串
		//重新设置起点位置
		p = p + strlen("abcd");
		n++;   //找到一次的次数加1

		if (*p == 0) //如果到结束符
		{
			break;
		}

	}

	printf("n = %d\n", n);

	return 0;
}

do-while模型

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

int main(void)
{
	char str[] = "11abcd111122abcd333abcd3322abcd3333322qqq";
	char* p = str;
	int n = 0;

	do
	{
		p = strstr(p, "abcd");
		if (p != NULL)
		{
			n++; //累计个数

			//重新设置查找的起点
			p = p + strlen("abcd");

		}
		else //如果没有匹配的字符串,跳出循环
		{
			break;
		}
	} while (*p != 0); //如果没有到结尾

	printf("n = %d\n", n);
	return 0;
}

两头堵模型

求非空字符串元素的个数:

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

int fun(char* p, int* n)
{
	if (p == NULL || n == NULL)
	{
		return -1;
	}

	int begin = 0;
	int end = strlen(p) - 1;

	//从左边开始
	//如果当前字符为空,而且没有结束
	while (p[begin] == ' ' && p[begin] != 0)
	{
		begin++; //位置从右移动一位
	}

	//从右往左移动
	while (p[end] == ' ' && end > 0)
	{
		end--; //往左移动
	}

	if (end == 0)
	{
		return -2;
	}

	//非空元素个数
	*n = end - begin + 1;

	return 0;
}

int main(void)
{
	char str[] = "      abcddsgadsgefg      ";
	char* p = str;
	int ret = 0;
	int n = 0;

	ret = fun(p, &n);
	if (ret != 0)
	{
		return ret;
	}
	printf("非空字符串元素个数:%d\n", n);   //非空字符串元素个数:14

	return 0;
}

字符串反转模型(逆置)

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

int inverse(char* p)
{
	if (p == NULL)
	{
		return -1;
	}
	char* str = p;
	int begin = 0;
	printf("%d\n", strlen(str)); //6
	printf("%d\n", strlen(p)); //6
	int end = strlen(str) - 1;
	char tmp;

	while (begin < end)
	{
		//交换元素
		tmp = str[begin];
		str[begin] = str[end];
		str[end] = tmp;

		begin++;  //往右移动位置
		end--;	    //往左移动位置
	}

	return 0;
}

int main(void)
{
	//char *str = "abcdefg"; //文件常量区,内容不允许修改
	char str[] = "abcdef";
	printf("%d\n", strlen(str)); //6
	int ret = inverse(str);
	if (ret != 0)
	{
		return ret;
	}

	printf("str ========== %s\n", str); //str ========== fedcba
	return 0;
}

参考:
[1]C基础讲义2018修订版(黑马程序员)


posted @ 2021-07-24 09:15  言非  阅读(51)  评论(0编辑  收藏  举报