C 函数的声明定义

C 函数的声明定义

C 函数的声明定义

#include <stdio.h>

// 声明
extern char* mystrstrPoint(char* dest, char* src);
extern char* mystrstrArr(char* dest, char* src);
extern char* mystrcat(char* dest, char* src);
extern void mybubblesort(char** sort_str, int len);

int main()
{
	char dest_str[] = "aasdfbdfcabc sd ";
	char src_str[] = "abc";
	// 1 指针实现
	char* p = mystrstrPoint(dest_str, src_str);
	printf("指针实现:%s\n",p);

	// 2 数组实现
	char* pp = mystrstrArr(dest_str, src_str);
	printf("数组实现:%s\n", pp);

	// 3 实现字符串拼接
	char dest_arr[100] = "hello"; //栈区 可修改
	char * src_arr = "world"; // 常量区 不能修改
	char* ppp = mystrcat(dest_arr, src_arr);
	printf("字符串拼接:%s\n", ppp);
	printf("字符串拼接:%s\n", dest_arr);

	// 4 字符数组 --栈区操作
	char str_arr[] = "hello world";
	char* p_arr = str_arr;
	*p_arr = 'A';
	p_arr++;
	*p_arr = 'B';
	printf("%s\n",str_arr);//ABllo world
	printf("%d\n", sizeof(str_arr));//12
	printf("%d\n", strlen(str_arr));//11
	printf("%d\n", sizeof(p_arr));//4 char* 类型的长度为4
	printf("%d\n", strlen(p_arr));//10  strlen()到'\0'的位置

	// 5 字符常量 --常量区操作
	char* str_point = "hello world";//字符常量 常量区操作
	printf("%s\n", str_point);//hello world
	printf("%c\n", str_point[0]);//h
	char* p_str = str_point;
	//p_str[0] = 'A';// 不能操作常量 
	//*p_str = 'A';//不能修改 -- 字符指针 指向字符常量 不能修改
	printf("%s\n", p_str);//
	printf("--------------\n");

	// 6 字符串排序 根据首字母进行排序 student tree new bee  栈区
	char * sort_str[] = { "astudent","dtree","cnew","bbee" };
	mybubblesort(sort_str,4);
	for (int i=0;i<4;i++)
	{
		printf("%s\n", sort_str[i]);
	} 
	system("pause");
	return 0;
}

// 冒泡排序
void mybubblesort(char** arr,int len)  // ** point 二维数组
{
	/* student 	tree 	new 	bee 	*/
	//printf("%c\n", arr[0][0]);
	//printf("%s\n", arr[0]);
	int flag = 1;//排序算法中  分为两种:时间广度  空间广度
	char * temp;
	for (int i = 0; i < len-1; i++)
	{
		for (int j = 0; j < len - i-1; j++)
		{
			if (arr[j][0] > arr[j + 1][0])	 //2 if(**(arr +j)<**arr(arr+j+1))  // 3 if(*arr[j] > *arr[j + 1])
			{
				flag = 0;
				temp = arr[j];				// temp = *(arr+j)
				arr[j] = arr[j + 1];		// *(arr+j) = *(arr+j+1)
				arr[j + 1] = temp;			// *(arr+j+1) = temp
			}
		}
		if (flag)
			return;
		flag = 1;
	}

}


// 字符串拼接 mystrcat
char* mystrcat(char* dest, char* src)
{
	char* start = dest;
	while (*dest)		
		dest++;
//	while (*src)
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
	while (*dest++ = *src++);//简化
	*dest = '\0';// 结束标识
	return start; //或者无返回 亦可实现
}

/* 自己归纳内容
1、目标字符串与查找字符串的第一个逐个比对
2、目标字符与查找字符第一个相同后,然后再对查找字符逐个比对
3、如果第一个相同 第四个不同 返回原位置+1 (如果全部相同则返回此时位置)
4、注意如果不是字符串,则没有结束标识需要计数器
*/

//数组实现 
char* mystrstrArr(char* dest, char* src)
{
	int i = 0;
	int j = 0;
	int counter = 0;
	int len = strlen(src);
	while (dest[i]) // 出口与i相关不然没有出口
	{
		counter = 0;
		printf("i:%d\n",i);
		while (dest[i] == src[j] && dest[i]) 
		{
			printf("%c,%c\n", dest[i], src[j]);
			i++;
			j++;
			counter++;
		}
		if (counter == len)
		{
			return &dest[i - counter];
		}
		else
		{
			i -= counter;//复位操作
			j = 0;
		}
		// dest 后移
		i++;
	}
	return NULL;
}



// 指针实现
char* mystrstrPoint(char* dest, char* src)
{
	char* temp = NULL;
	char* p = NULL;
	int count = 0;//可以没有 排查问题时使用
	while (*dest)//目标字符串不为空
	{
		printf("第%d次循环\n", count+1);
		temp = src;
		p = dest;
		while (* dest == * temp && *dest != '\0') //目标字符串的开始与结束位置 否则出现 烫烫烫...
		{
			printf("%c,%c\n",*dest,*temp);
			dest++;
			temp++;
		}
		if (!*temp) //(*temp == '\0')
			return p;
		else
			dest = p;// 返回对比前的dest位置--归位
		
		dest++;// 下一个字符
		count++;
	}
	return NULL; // dest 与 src不匹配返回NULL
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值