📅  最后修改于: 2023-12-03 14:40:26.196000             🧑  作者: Mango
在C语言中,有一个关于字符串的问题。给定一个字符串,你需要编写一个函数来查找字符串中的最长的连续数字子串,并返回该子串的起始位置和长度。
要求:
示例输入和输出:
输入: "I have 123 apples and 456 oranges."
输出: [7, 3]
解释: 最长的连续数字子串是"123",它起始于索引7,长度为3。
输入: "No digits here!"
输出: [-1, 0]
解释: 没有连续的数字子串,返回[-1, 0]表示没有找到。
一种解决该问题的方法是使用双指针法来遍历字符串,并使用一个变量来记录当前最长的连续数字子串的起始位置和长度。遍历字符串时,如果当前字符是数字字符,则将右指针向右移动一位,并更新最长子串的长度。如果遇到非数字字符,则比较当前最长子串的长度与记录的最大长度,如果更长则更新最大长度和起始位置。
下面是使用C语言实现的解决方案示例代码片段:
#include <stdio.h>
int* findLongestDigitSubstring(const char *str) {
int start = -1; // 最长子串起始位置
int length = 0; // 最长子串长度
int current = 0; // 当前子串起始位置
int maxLength = 0; // 记录的最大长度
while (*str) {
if (*str >= '0' && *str <= '9') {
if (current == -1) {
current = str - start;
}
length++;
} else {
if (length > maxLength) {
maxLength = length;
start = current;
}
current = -1;
length = 0;
}
str++;
}
// 检查最后一个子串
if (length > maxLength) {
maxLength = length;
start = current;
}
static int result[2];
result[0] = start;
result[1] = maxLength;
return result;
}
int main() {
const char *input1 = "I have 123 apples and 456 oranges.";
int *output1 = findLongestDigitSubstring(input1);
printf("输入: \"%s\"\n输出: [%d, %d]\n\n", input1, output1[0], output1[1]);
const char *input2 = "No digits here!";
int *output2 = findLongestDigitSubstring(input2);
printf("输入: \"%s\"\n输出: [%d, %d]\n", input2, output2[0], output2[1]);
return 0;
}
注意:上述代码片段中的 findLongestDigitSubstring
函数返回一个静态整型数组,该数组存储了最长子串的起始位置和长度。在使用函数的返回值时,请确保提前将其拷贝到所需的地方,以避免引发未定义行为。
希望这个代码片段能够对你有所帮助!