📜  连续字符 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:12:20.691000             🧑  作者: Mango

连续字符 - C 编程语言

在 C 语言中,有多种方法来找到一个字符串中最长的连续字符。在本篇文章中,我们将介绍其中两种方法。

方法一:使用循环

首先,我们可以使用一个循环来查找字符串中最长的连续字符。在代码中,我们通过循环遍历字符串,并使用一个计数器变量来计算连续字符的数量。如果遇到一个不同的字符,则将计数器重置为 1。

代码如下:

#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    int i, count = 1, max_count = 1;
    
    printf("Enter a string: ");
    fgets(str, sizeof(str), stdin);
    
    for (i = 1; str[i] != '\0'; i++) {
        if (str[i] == str[i - 1]) {
            count++;
        } else {
            if (count > max_count) {
                max_count = count;
            }
            count = 1;
        }
    }
    
    if (count > max_count) {
        max_count = count;
    }
    
    printf("Maximum consecutive characters: %d\n", max_count);
    
    return 0;
}

解释:

  • 我们使用一个字符数组 str 来存储用户输入的字符串。
  • 我们定义了两个整型变量 countmax_count,用于保存当前的连续字符数量和最大的连续字符数量。
  • 使用 fgets() 函数来获取用户输入的字符串,并检查字符串的长度是否超过数组 str 的大小。
  • 使用 for 循环遍历字符串 str 中的每个字符,当遇到连续相同字符时,增加计数器 count 的值。当遇到不同字符时,将 countmax_count 进行比较,更新最大连续字符数量。
  • 最后,我们输出最大连续字符数量。
方法二:使用递归

另外一种方法是使用递归来查找最长的连续字符。我们可以将字符串不断拆分成更小的子串,然后在每个子串中查找最长的连续字符。

代码如下:

#include <stdio.h>
#include <string.h>

int count_consecutive_chars(char str[], int length) {
    if (length == 1) {
        return 1;
    }
    
    int count = 1, max_count = 1;
    
    if (str[length - 1] == str[length - 2]) {
        count = count_consecutive_chars(str, length - 1) + 1;
    } else {
        count_consecutive_chars(str, length - 1);
    }
    
    if (count > max_count) {
        max_count = count;
    }
    
    return max_count;
}

int main() {
    char str[100];
    
    printf("Enter a string: ");
    fgets(str, sizeof(str), stdin);
    str[strcspn(str, "\n")] = '\0';
    
    int max_count = count_consecutive_chars(str, strlen(str));
    
    printf("Maximum consecutive characters: %d\n", max_count);
    
    return 0;
}

解释:

  • 我们定义一个递归函数 count_consecutive_chars() 来查找最长的连续字符。在每个递归步骤中,我们将字符串不断拆分成更小的子串,在子串中查找最长的连续字符。
  • 当长度为 1 时,表示当前子串只有一个字符,直接返回计数器 1。
  • 在每个递归步骤中,我们声明一个计数器变量 count,用于记录当前连续字符的数量。如果当前字符与前一个字符相同,我们增加计数器变量的值。否则,递归查找更小的子串。
  • 当递归结束后,我们更新计数器变量 max_count 的值,并返回最大连续字符数量。
  • main() 函数中,我们获取用户输入的字符串,并调用 count_consecutive_chars() 函数来查找最大的连续字符数量。最后,我们输出结果。
总结

这两种方法都可以用来查找一个字符串中最长的连续字符。使用循环的方法更加简单直接,使用递归的方法更加优雅简洁。尽管两种方法的时间复杂度都为 O(n),使用递归的方法空间复杂度更高。使用哪种方法取决于具体的场景和需求。