C :使用递归在字符串中找到最小值的位置
C++: Use recursion to find the POSITION of the smallest value in a string?
如何使用递归来找到字符串中最小值的位置?我唯一可以拥有的2个参数是数组及其大小。
两参数限制要求您使用一个小技巧:由于不允许您将索引添加为第三个参数,请改用长度。您将将递归运行的结果与范围0..length-1
的最后一个元素进行比较。
推理是这样的:
- 如果数组的长度为1,请返回初始元素的索引
- 否则,运行
length-1
的算法,并将从递归调用返回的索引与最后一个元素的值进行比较(即在索引length-1
) - 如果最后一个元素较小,请返回
length-1
- 否则,返回从递归调用获得的索引
如果它是一个普通的数组,则可以修改指针(并相应地减小大小)以获取"子阵列"以传递到下一个递归级别。这样的东西:
size_t minpos(int *arr, size_t length)
{
if(length < 2) return 0;
size_t pos1 = minpos(arr + 1, length - 1);
if(arr[pos1] < arr[0]) return pos1 + 1;
else return 0;
}
如果您需要在包含字符串的字符数组中找到最小的字符,则完全不清楚为什么函数必须具有两个参数。通常,处理字符串的算法只需一个参数。
所以我写了一个只有一个参数的函数,并返回最小的字符,不包括终止零。
这是功能
#include <iostream>
size_t min_character( const char *s )
{
if ( s[0] == ' ' ) return 0;
size_t n = min_character( s + 1 ) + 1;
return ( s[n] == ' ' ) || !( s[n] < s[0] ) ? 0 : n;
}
int main()
{
const char *s = "anon123";
size_t n = min_character( s );
std::cout << n << ": '" << s[n] << ''' << std::endl;
return 0;
}
程序输出是
4: '1'
因为给定字符串中最小的字符是字符'1',并且它的poistion 4从0。
开始。使用两个参数,该函数看起来像
size_t min_character( const char *s, size_t n )
{
if ( n == 0 ) return 0;
size_t i = min_character( s + 1, n - 1 ) + 1;
return ( i == n ) || !( s[i] < s[0] ) ? 0 : i;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 需要使用模板查找数组的第二个最小和最小值
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 查找包含 N 个元素的数组的最小值和最大值
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 将最小值整数转换为无符号长整型
- 如何获得C 中向量复合物值的最大,最小和位置
- YCBCR 帧的最大值和最小值在 openCV 中的位置
- C :使用递归在字符串中找到最小值的位置