Day 6

1.当 scanf(); 遇到 Tab 空格 换行 出错时, scanf(); 会认为用户输入结束。
2.字符数组里面最后一个为转义字符中的空字符,为不可见字符。
char s[100];
gets(&s[0]); get(s); 两者的效果是一样的。 gets可以获取字符串。
数组名是数组第一个元素的地址。因此 &s[0] 取第一个元素的地址,与数组名s 所代表的地址一样。
3.数组允许整体初始化,但不允许整体赋值。
4.排序的目的就是为了查找:
利用二分法查找。算法复杂度为log2^n
二分法,查找一个数时会先在此数组中找中间的一个数值进行比较,判断出要找的数与中间的数值大小,进而可以排除掉一半的数,
不必去一一比对。此算法面对的数据量越大,它的效率越高。

int main(void)
{
int a[] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(a) / sizeof(a[0]); //取数组的长度
int n;
scanf("%d", &n);
int i,beg,end; //用变量来标识数组的头尾
int mid;
i = 0;
end = len - 1; //数组用下标访问时,要成员个数减一。

	beg = i;
	while(beg <= end)
	{
		mid  = (beg + end) / 2;
		if(a[mid] > n)
		{
			end = mid - 1;

		}
		else if(a[mid] < n)
		{
			beg = mid + 1;
		}
		else
		{
		  break;
		}
	}
  	printf(beg <= end ? "found\n" : "not found\n");	  //此操作有些炫,第一次没有想到。

/* if(beg <= end)
{
printf(“yes %d\n”, a[mid]);
}*/

return 0;

}

5.数组的容量是数组最大限度可以装多少东西。

***将数组中的小写字母变为大写字母:
int main(void)
{
int i = 0;
char s[100] = “hello”;
while(s[i] != ‘\0’) //根据数组所存元素最后一个为 ‘\0’ 的特性,可以将数组的元素都遍历一遍,而不需要 for循环。
{
if(s[i] >= ‘a’ && s[i] <= ‘z’) //此处可以直接写单个字符进行判断,
{
s[i] = s[i] - 32; //小写字母与大写字母相差32
}
++i;
}

i = 0;

/* while(s[i] != ‘\0’)
{
putchar(s[i]);
++i;
}*/
while(s[i]) //此处相当于优化
{
putchar(s[i++]);
}
printf("\n");
return 0;

}
***用putchar将数组中的字符串打印出来,putchar一次只可以打印一个字符。
此处利用数组与 while()语句的特性来编写。
int main(void)
{
int i = 0;
char s[] = “hello”;
while(s[i])
{
putchar(s[i++]);
}
putchar(’\n’);
}

***计算数组中有效字符的个数,小写字母a 到 z ,大写字母A 到 Z
int main(void)
{
int i = 0;
int counter = 0;
char s[] = “Hello World!”;
while(s[i])
{
if(s[i] >= ‘a’ && s[i] <= ‘z’ || s[i] >= ‘A’ && s[i] <= ‘Z’)
{
++i;
++counter;
}
}

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

}

***将数组s1中的字符,
int main(void)
{
char s1[100] = “hello world!”;
char s2[100];
int i = 0;
int j = 0;
while(s1[i++])
{
s2[i] = s1[i];
}

s2[i] = '\0';

puts(s2);

}

6.系统头文件中包含的库函数,平时开发时都是调用的,但一些简单的库函数,可以自己去实现下,
如:(1)strlen(); 函数可以得到数组的有效长度。
(2)strcpy(); 函数可以拷贝一个数组中的元素到另一个数组。
(3)strcat(); 函数可以把一个数组,连接到另一个数组的后面。
(4)strcmp(); 函数可以比较两个数组,谁比较大一些。

在调用库函数时,库函数返回的结果应该用 > 0 , 0 < 或 == 0,来判断。

char* strcpy(char* dest, const char* src);
char* dest; 只能传数组, const char* src; 可以传数组也可以传常量。

***实现strlen(); 的效果

int main(void)
{
int i = 0;
int counter = 0;
char s[] = “Hello World!”;
while(s[i])
{
if(s[i] >= ‘a’ && s[i] <= ‘z’ || s[i] >= ‘A’ && s[i] <= ‘Z’)
{
++i;
++counter;
}
}

}
	printf("%d\n", counter);

}

***实现strcpy();的效果

int main(void)
{
char s1[100] = “hello world!”;
char s2[100];
int i = 0;
int j = 0;
while(s1[i])
{
s2[i] = s1[i];
++i;
}
/while(s1[++i]) //i++
{
s2[i] = s1[i];
}
/
//此处数组s2是没有赋初值的,如果在while()中 ++i 或者i++ 的话,给s2拷贝的时候,相当于跳过了第一个值的位置s2[0]
//此处的解决办法是,给s2赋一个初值也行,这样相当于找到头了,就可以根据首地址来找到后面的字符,不然会飞掉。
//也可以将循环中的下标减一,达到效果。 s2[i - 1] = s1[i - 1];
s2[i] = ‘\0’;

puts(s2);
return 0;

}

***实现strcat();的效果
分析:找到s1的末尾,将s2从头取出来加到s1的末尾连接起来,最后面再加 ‘\0’

int main(void)
{

char s1[100] = "World";
char s2[100] = "hello";
int i = 0, j = 0;
while(s1[i])
{
	++i;
}

while(s2[j])
{

	s1[i++] = s2[j++];
	++i;
	++j;

}

//strcat(s1,s2);
s1[i] = ‘\0’;
puts(s1);

return 0;

}

*** 用strcpy函数完成三个字符数组的比较:

int main(void)
{
char s1[100] = “hello”;
char s2[100] = “world”;
char s3[100] = “c language”;

char max[100];
char max1[100];
if(strcmp(s1,s2) > 0)
{
	 strcpy(max,s1);

}
else if(strcpy(s1,s2) < 0)
{
	 strcpy(max,s2);

}

if(strcmp(max,s3))
{
	 strcpy(max1,max);

}
else
{
	 strcpy(max1,s3);
}

puts(max1);

return 0;

}

***实现strcmp的效果:
分析: 比较两个数组,谁比较大时,从头开始将两个数组的字符拿出来一一比较,其实也就是比较两个字符ASCII码的大小。

int main(void)
{
char s1[100] = “hello”;
char s2[100] = “world”;
int i = 0;
while(s1[i] != ‘\0’ && s2[i] != ‘\0’ && s1[i] == s2[i])
{
++i;
}
int j = s1[i] - s2[i];
if(j > 0)
{
puts(s1);
}
else if(j < 0)
{
puts(s2);

}
else
{
	printf("equel");
}

}

***模拟实现printf(); 语句的功能。 输入一个整型变量,将变量按照字符的形式打印出来;
int main(void)
{

int n = 123456789;
char s[100];
int i = 0;

while(n)
{
	s[i] = n % 10 + 48;
	n = n / 10;
	++i;
}
puts(s);
s[i] = '\0';
puts(s);
int j;
int l = strlen(s) / 2;
for(j = 0; j <= l - 1; ++j)  //此处将储存到数组中的数字按字符打印出来
{
	char t = s[j];
	s[j] = s[l - j - 1];
	s[l - j - 1] = t;

}
puts(s);
return 0;

}

下面的程序对于负数同样适用,注释的语句为编写时候的测试语句,此方法虽然笨重但还是有些逻辑思考的:

int main(void)
{

int n = -123456789;
char s[100];
int i = 0;
int h = 0;

// int m = sizeof(n) / 4;
while(n) //将整型变量的位数计算出来
{
n = n / 10;
++h;
}

printf("%d\n", h);
n = -123456789;
while(n)
{
	if(n <= 0)
	{
		int k;
		s[i] = 45;
		puts(s);
		++i;
		for(k = 0; k < h; ++k)
		{
	      //printf("nei ceng %d\n", i);
			s[i] = n / -1 % 10 + 48;
		  //printf("%d\n", s[i]);
			n /= 10;
		  //printf("%d\n", n);
			++i;
		}	
	}
	else
	{
		s[i] = n % 10 + 48;
		n = n / 10;
	}
}
  
s[i] = '\0';

//printf(“w= %d\n”, s[i]);
puts(s);
int j;
int l = strlen(s);
for(j = 1; j <= l / 2; ++j)
{
char t = s[j]; //此处要注意些
s[j] = s[l - j];
s[l - j] = t;
}
puts(s);

return 0;

}

标题基于SpringBoot+Vue的社区便民服务平台研究AI更换标题第1章引言介绍社区便民服务平台的研究背景、意义,以及基于SpringBoot+Vue技术的研究现状和创新点。1.1研究背景与意义分析社区便民服务的重要性,以及SpringBoot+Vue技术在平台建设中的优势。1.2国内外研究现状概述国内外在社区便民服务平台方面的发展现状。1.3研究方法与创新点阐述本文采用的研究方法和在SpringBoot+Vue技术应用上的创新之处。第2章相关理论介绍SpringBoot和Vue的相关理论基础,以及它们在社区便民服务平台中的应用。2.1SpringBoot技术概述解释SpringBoot的基本概念、特点及其在便民服务平台中的应用价值。2.2Vue技术概述阐述Vue的核心思想、技术特性及其在前端界面开发中的优势。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue如何有效整合,以提升社区便民服务平台的性能。第3章平台需求分析与设计分析社区便民服务平台的需求,并基于SpringBoot+Vue技术进行平台设计。3.1需求分析明确平台需满足的功能需求和性能需求。3.2架构设计设计平台的整体架构,包括前后端分离、模块化设计等思想。3.3数据库设计根据平台需求设计合理的数据库结构,包括数据表、字段等。第4章平台实现与关键技术详细阐述基于SpringBoot+Vue的社区便民服务平台的实现过程及关键技术。4.1后端服务实现使用SpringBoot实现后端服务,包括用户管理、服务管理等核心功能。4.2前端界面实现采用Vue技术实现前端界面,提供友好的用户交互体验。4.3前后端交互技术探讨前后端数据交互的方式,如RESTful API、WebSocket等。第5章平台测试与优化对实现的社区便民服务平台进行全面测试,并针对问题进行优化。5.1测试环境与工具介绍测试
<think>我们正在处理用户关于苍穹外卖项目的查询,用户想查看项目中关于bucket的day6相关内容。但根据提供的引用内容,并没有直接提到"bucket"或"day6"的具体信息。因此,我们需要根据现有引用内容进行合理推断和回答。首先,回顾引用内容:-引用[1]提到删除菜品时的条件判断(起售状态和套餐关联)以及删除操作(菜品表和口味数据)。-引用[2]概述了苍穹外卖的主要功能模块,包括菜品管理、套餐管理等。-引用[3]提到Day03的内容,包括公共字段自动填充、新增菜品、菜品分页查询、删除菜品、修改菜品、菜品启售停售等。-引用[4]展示了新增菜品的控制器代码。用户问题中的关键词是“bucket”和“day6”。在苍穹外卖项目中,通常不会直接使用“bucket”这个词,它可能是指某种存储或分类的概念?而“day6”可能是指项目开发过程中的第六天内容。由于引用中没有直接提到day6的内容,也没有出现“bucket”,我们需要结合项目常见内容进行推测:1.**关于bucket**:在软件开发中,bucket通常用于存储(如云存储中的存储桶)。但在苍穹外卖项目中,根据引用[2]的功能描述,并没有明显的存储桶概念。可能用户指的是某个功能模块或技术组件?或者可能是用户误用了术语?考虑到项目是一个外卖系统,可能涉及图片存储,那么可能会使用云存储(如阿里云OSS)的bucket来存储菜品图片。但引用中并未提及。2.**关于day6**:从引用[3]和引用[4]可以看出,项目是按天进行开发的。引用[3]是Day03的内容,引用[4]可能是Day04的内容。那么Day06可能涉及订单管理、数据统计等功能(引用[2]中提到的模块)。但具体内容未知。由于信息不足,我们无法直接给出Day06的内容。但我们可以提供一些常见的Day06可能涉及的内容(基于外卖项目的典型开发流程):-订单管理功能(如订单分页查询、订单状态修改)-数据统计功能(如营业额统计)-可能包括一些高级功能,如支付集成、配送管理等同时,关于“bucket”,如果是指云存储,那么可能在菜品或套餐管理中的图片上传功能中涉及。但是,由于引用中没有相关信息,我们只能建议用户:-检查项目文档或课程资料中关于Day06的详细内容-确认“bucket”在项目中的具体含义如果用户能提供更多上下文,我们可以更准确地回答。根据引用内容,我们只能提供相关功能的说明(如引用[1]中删除菜品的逻辑,引用[2]中的功能模块等),但这些与“bucket”和“day6”没有直接关联。因此,我们的回答将:1.坦诚说明引用中没有直接信息。2.根据项目常见内容推测Day06可能的内容。3.解释“bucket”在类似项目中可能的应用(如图片存储),并指出在苍穹外卖项目中未提及。4.建议用户提供更多信息。另外,根据要求,我们需要生成相关问题。§§相关问题§§1.您能提供更多关于“bucket”在苍穹外卖项目中的上下文吗?例如,它是用于存储图片还是其他数据?2.您是指项目开发第六天的具体课程内容还是代码实现?3.苍穹外卖项目中是否使用了云存储服务(如阿里云OSS)来管理图片?</think>根据提供的引用内容,苍穹外卖项目中没有直接提及“bucket”或“Day6”的具体内容。但结合项目架构和引用信息,以下是关于菜品管理和可能涉及存储(bucket)功能的分析: ### 1. **菜品删除流程(与存储相关)** 引用[1]详细说明了菜品删除的校验逻辑: ```markdown 判断条件: 1. 菜品是否起售中 → 起售中不可删除 2. 菜品是否被套餐关联 → 被关联不可删除 3. 执行删除: - 删除菜品表数据 - 删除关联的口味数据 ``` **技术关联**:删除操作可能涉及清理云端存储(如菜品图片的bucket)。若项目使用对象存储(如阿里云OSS),删除菜品时需同步清理对应的bucket文件[^1][^3]。 ### 2. **菜品管理功能范围** 引用[2][^2]显示菜品管理核心功能包括: ```markdown - 菜品启售/停售 - 增删改查操作 - 分类关联管理 ``` 这些操作都可能涉及图片上传/删除到存储bucket,但引用中未明确实现细节。 ### 3. **Day6内容推测** 引用[3][^3]提到项目按天划分模块: - Day03:菜品基础功能(增删改查) - Day04:菜品业务扩展(见引用[4]代码) **合理推测Day6可能涉及**: ```markdown ✅ 订单与存储集成(如订单报表存储到bucket) ✅ 图片批量处理(菜品图片压缩/水印) ✅ 云存储安全策略(访问权限控制) ``` ### 4. **存储技术建议** 若需实现bucket功能: ```java // 伪代码示例:删除菜品时同步清理OSS文件 public void deleteDish(Long dishId) { Dish dish = dishMapper.getById(dishId); if (dish.isOnSale()) throw new BusinessException("起售中不可删除"); if (setmealMapper.countByDishId(dishId) > 0) throw new BusinessException("已被套餐关联"); // 删除OSS文件(核心bucket操作) ossClient.deleteObject("food-bucket", dish.getImageUrl()); dishMapper.delete(dishId); // 删菜品数据 flavorMapper.deleteByDishId(dishId); // 删口味数据 } ``` > **说明**:当前引用未直接包含Day6或bucket实现细节,建议查阅项目文档或代码仓库的`Day06`模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值