【C 语言】字符串模型 ( 两头堵模型 )

2023-03-29 21:25:28 浏览数 (1)

文章目录

  • 一、两头堵模型
  • 二、完整代码示例

一、两头堵模型


两头堵模型 是 有

2

个指针 , 一个指向字符串头部 , 一个指向字符串尾部 ;

  • 头部指针 从左向右 开始遍历 ;
  • 尾部指针 从右向左 开始遍历 ’ ’

业务逻辑 :" sdfsdfsdabc4548411abc " 字符串中 , 找出 前后不为空 的 子串长度 ;

声明两个指针 , 分别指向开始 和 结尾处 ;

代码语言:javascript复制
    // 存在如下字符串, 求 前后不为空 的 子串长度
    char *str = "   sdfsdfsdabc4548411abc    ";

    // 两个字符串索引 , i 是指向头部 , j 指向尾部
    int i = 0, j = strlen(str) - 1;

左侧的指针从左向右遍历 :

代码语言:javascript复制
    // 循环条件是 i 指针指向的 位置 为空 则继续循环
    // 遇到第一个不为空的字符 , 便停止循环
    // 停止循环时的 i 指向从左侧开始第一个不为空的字符
    while(isspace(str[i]) && str[i] != '')
    {
        i  ;
    }

右侧的指针从右向左遍历 :

代码语言:javascript复制
    // 循环条件是 j 指针指向的 位置 为空 则继续循环
    // 遇到第一个不为空的字符 , 便停止循环
    // 停止循环时的 j 指向从右侧开始第一个不为空的字符
    while(isspace(str[j]) && str[j] != '')
    {
        j--;
    }

二、完整代码示例


代码示例 :

代码语言:javascript复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    // 存在如下字符串, 求非空格子串的长度
    char *str = "   sdfsdfsdabc4548411abc    ";

    // 两个字符串索引 , i 是指向头部 , j 指向尾部
    int i = 0, j = strlen(str) - 1;

    // 保存非空字符串长度
    int count = 0;

    // 循环条件是 i 指针指向的 位置 为空 则继续循环
    // 遇到第一个不为空的字符 , 便停止循环
    // 停止循环时的 i 指向从左侧开始第一个不为空的字符
    while(isspace(str[i]) && str[i] != '')
    {
        i  ;
    }

    // 循环条件是 j 指针指向的 位置 为空 则继续循环
    // 遇到第一个不为空的字符 , 便停止循环
    // 停止循环时的 j 指向从右侧开始第一个不为空的字符
    while(isspace(str[j]) && str[j] != '')
    {
        j--;
    }

    // 计算结果
    count = j - i   1;
    // 打印结果
    printf("count = %dn", count);

    // 命令行不要退出
    system("pause");
    return 0;
}

执行结果 :

代码语言:javascript复制
count = 21
请按任意键继续. . .

0 人点赞