6-31 实验10_4_设计函数 locatesubstr
时间: 2023-03-16 12:45:13 浏览: 85
函数名称:locatesubstr
函数功能:在字符串中查找子串,并返回子串在字符串中的位置
函数参数:str(字符串),substr(子串)
函数返回值:子串在字符串中的位置,若未找到则返回-1
函数实现:
1. 判断子串是否为空,若为空则返回-1
2. 遍历字符串,查找子串的第一个字符在字符串中的位置
3. 若找到,则继续比较字符串中的子串是否与目标子串相同
4. 若相同,则返回子串在字符串中的位置
5. 若未找到,则返回-1
函数示例:
str = "hello world"
substr = "world"
pos = locatesubstr(str, substr)
print(pos) # 输出6
str = "hello world"
substr = "python"
pos = locatesubstr(str, substr)
print(pos) # 输出-1
相关问题
6-2 实验10_4_设计函数 locatesubstr
函数功能:在一个字符串中查找另一个字符串第一次出现的位置。
函数原型:`int locatesubstr(char* str1, char* str2)`
输入参数:
- `str1`:指向要查找的字符串的指针;
- `str2`:指向要在 `str1` 中查找的子字符串的指针。
输出参数:无。
返回值:
- 如果 `str2` 是 `str1` 的子字符串,则返回 `str2` 在 `str1` 中第一次出现的位置;
- 如果 `str2` 不是 `str1` 的子字符串,则返回 `-1`。
实现思路:
- 遍历 `str1` 中的每一个字符;
- 对于 `str1` 中的每一个字符,从该字符开始逐个与 `str2` 中的字符比较;
- 如果 `str1` 中的某个位置开始与 `str2` 完全匹配,则返回该位置;
- 如果遍历完 `str1` 都没有找到匹配的位置,则返回 `-1`。
函数实现:
```c
int locatesubstr(char* str1, char* str2)
{
int len1 = strlen(str1), len2 = strlen(str2); // 计算 str1 和 str2 的长度
for (int i = 0; i < len1 - len2 + 1; i++) { // 遍历 str1 的每个字符
int j;
for (j = 0; j < len2; j++) { // 从 str1 的当前位置开始逐个与 str2 比较
if (str1[i+j] != str2[j]) { // 如果有不同的字符,则退出循环
break;
}
}
if (j == len2) { // 如果 str2 中的所有字符都与 str1 中的某一段匹配,则返回该位置
return i;
}
}
return -1; // 如果遍历完 str1 都没有找到匹配的位置,则返回 -1
}
```
注意事项:
- 在比较两个字符串时,要逐个比较它们的字符,而不能直接使用 `==` 运算符比较整个字符串。
- 在遍历 `str1` 时,只需要遍历到 `len1 - len2` 的位置,因为如果 `str1` 的剩余部分的长度小于 `str2` 的长度,那么肯定无法与 `str2` 匹配。
- 在比较完 `str2` 中的所有字符时,要判断 `j` 是否等于 `len2`,如果等于,则说明 `str2` 完全匹配了 `str1` 中的某一段,此时应该返回该位置;如果不等于,则说明 `str2` 没有匹配成功,需要继续遍历 `str1`。
STM32f042 ADC代码回调函数PA5 ------> ADC_IN5 PA6 ------> ADC_IN6 PA7 ------> ADC_IN7
STM32F042是一款基于ARM Cortex-M0内核的微控制器,它具有丰富的外设和功能,适用于各种应用场景。其中,ADC(模数转换器)是其中一个重要的外设,用于将模拟信号转换为数字信号。
在STM32F042中,ADC的引脚映射关系如下:
- PA5对应ADC_IN5
- PA6对应ADC_IN6
- PA7对应ADC_IN7
要使用ADC功能,需要进行相应的配置和编程。下面是一个示例代码,演示了如何使用回调函数来读取PA5、PA6和PA7对应的模拟信号:
首先,需要进行ADC的初始化配置,包括时钟使能、通道选择、采样时间等。然后,定义一个回调函数,在该函数中读取并处理ADC转换结果。
```c
#include "stm32f0xx.h"
// ADC回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
// 读取ADC转换结果
uint16_t adc_value = HAL_ADC_GetValue(hadc);
// 处理ADC转换结果
// ...
}
int main(void)
{
// 初始化GPIO和ADC
// 配置ADC通道和采样时间
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_5; // 选择通道5
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 设置采样时间
HAL_ADC_ConfigChannel(&hadc, &sConfig);
// 启动ADC转换
HAL_ADC_Start_IT(&hadc); // 使用中断模式启动转换
while (1)
{
// 主循环
// ...
}
}
```
以上是一个简单的示例代码,通过回调函数`HAL_ADC_ConvCpltCallback`来处理ADC转换结果。在该函数中,可以读取并处理ADC转换结果,具体的处理方式根据实际需求进行编写。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)