当前位置: 首页 > news >正文

点击消除:删除连续重复的字符

这段代码实现了一个简单的字符串输入和处理程序,它的主要功能是删除连续重复的字符,并输出处理后的结果。

代码:

#include<stdio.h>int main() {// 初始化,定义一个字符数组,并且使用该数组来进行获取输入,同时使用指针来操作该数组char arr[300001], rev;  // 定义一个字符数组和一个字符变量char *p;  // 定义一个字符指针p = &arr[1];  // 指针指向数组的第二个位置(arr[1])while(1) {rev = getchar();  // 从标准输入读取一个字符if (rev == '\n') {  // 如果读取到换行符,表示输入结束*p = '\0';  // 在当前指针位置写入字符串结束符break;  // 结束循环} else {*p = rev;  // 将读取到的字符存入数组当前指针位置if (*p == *(p-1)) {  // 检查当前字符与前一个字符是否相同p--;  // 如果相同,指针回退一位,相当于删除当前字符} else {p++;  // 如果不同,指针前移一位,准备存储下一个字符}}}// 准备输出处理后的字符串if (arr[1] == '\0') {printf("0");  // 如果第一个有效位置是结束符,说明没有字符,输出0} else {p = &arr[1];  // 将指针重新指向数组的第一个有效字符printf("%s", p);  // 输出处理后的字符串}return 0;  // 程序正常结束
}

示例:

输入: abbc       输出: ac

1. 变量初始化

char arr[300001], rev;
char *p;
p = &arr[1];

这段代码首先初始化了一个字符数组 arr 和一个指针 p,指针 p 被指向 arr[1]。此时,arr 中的内容为空,p 指向数组的第二个位置。

2. 开始输入处理

用户输入 "abbc" 并按下回车。代码将逐个读取字符并进行处理。

3. 逐字符处理

第一步: 输入 'a'

  • rev = getchar(); 读取第一个字符 'a'。
  • *p = rev; 将 'a' 存入 arr[1] 位置。此时 arr[1] = 'a'
  • 指针 p 向后移动一位,指向 arr[2]

第二步: 输入 'b'

  • rev = getchar(); 读取下一个字符 'b'。
  • *p = rev; 将 'b' 存入 arr[2] 位置。此时 arr[2] = 'b'
  • 指针 p 向后移动一位,指向 arr[3]

第三步: 输入 'b'(再次)

  • rev = getchar(); 读取下一个字符 'b'。
  • *p = rev; 将 'b' 存入 arr[3] 位置。
  • 代码检查当前字符与前一个字符是否相同:if(*p == *(p-1))
    • 由于 arr[3]arr[2] 都是 'b',这两个字符相同。
  • 因此,指针 p 回退一位,指向 arr[2],即取消了之前输入的字符 'b'。此时 arr[2] 的值被新的字符替换。

第四步: 输入 'c'

  • rev = getchar(); 读取下一个字符 'c'。
  • *p = rev; 将 'c' 存入 arr[2] 位置,替换之前的 'b'。
  • 此时,arr[1] = 'a'arr[2] = 'c'
  • 指针 p 向后移动一位,指向 arr[3]

第五步: 输入 '\n'(回车)

  • 当用户按下回车键,rev = '\n'
  • 代码检测到换行符,表示输入结束。
  • *p = '\0'; 将当前指针所指位置(arr[3])设为字符串结束符 \0

4. 输出处理后的字符串

if(arr[1] == '\0')printf("0");
else
{p = &arr[1];printf("%s", p);
}
  • 检查 arr[1] 是否为空字符 '\0'。在本例中,arr[1] = 'a',所以不会输出 0
  • 指针 p 被重新指向 arr[1],然后输出从 p 开始的字符串,即 "ac"。

http://www.mrgr.cn/news/16183.html

相关文章:

  • 信息安全--(五)物理与环境安全技术(二)机房安全分析与防护
  • 【Linux操作系统】重装系统配置文件一条龙
  • STM32通过ADM3222完成UART转232通信电平转换
  • 设计模式之桥接模式
  • P1494 [国家集训队] 小 Z 的袜子(分块,莫队算法)
  • 分类任务实现模型集成代码模版
  • 【每日一题】【想通后的诈骗题】Wakey Wakey 牛客挑战赛76 A题 C++
  • 探索全能型AI与专业型AI的未来趋势
  • Simulink代码生成:关系运算与逻辑运算
  • 2024大模型学习:机器学习在安全领域的应用|从大数据中识别潜在安全威胁
  • Netty 知识目录
  • 操作系统页面置换: 先进先出算法(FIFO)
  • Unet改进11:在不同位置添加MLCA||轻量级的混合本地信道注意机制
  • 书生浦语实训营-InternVL 多模态模型部署微调实践
  • 设计模式-UML建模语言面向对象的SOLIDLC
  • 绥芬河外贸公司俄语网站建设方案
  • Java基于大模型实现客服系统
  • JS中【事件】长篇详解与代码示例
  • 小程序全局挂载对像
  • swupdate-签名验证