首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C 语言】字符串模型 ( 两头堵模型 )

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

作者头像
韩曙亮
发布于 2023-03-29 21:25:28
发布于 2023-03-29 21:25:28
1.1K0
举报

文章目录

一、两头堵模型


两头堵模型 是 有

2

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

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

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

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

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

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

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

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

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

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

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

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

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

执行结果 :

代码语言:javascript
复制
count = 21
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 文章目录
  • 一、两头堵模型
  • 二、完整代码示例
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档