如何从 C 字符串中删除所有出现的给定字符?

2024-02-02

我正在尝试从 C 中的字符串中删除一个字符。我的代码遇到的问题是,它从字符串中删除了该字符的第一个实例,但也擦除了字符串中该字符之后的所有内容。例如,从“hello”中删除“l”会打印“he”而不是“heo”

int i;
char str1[30] = "Hello", *ptr1, c = 'l';
ptr1 = str1;
for (i=0; i<strlen(str1); i++)
{
    if (*ptr1 == c) *ptr1 = 0;
    printf("%c\n", *ptr1);
    ptr1++;
}

我需要为此使用指针,并且希望使其尽可能简单,因为我是 C 初学者。 谢谢


你可以这样做:

void remove_all_chars(char* str, char c) {
    char *pr = str, *pw = str;
    while (*pr) {
        *pw = *pr++;
        pw += (*pw != c);
    }
    *pw = '\0';
}

int main() {
    char str[] = "llHello, world!ll";
    remove_all_chars(str, 'l');
    printf("'%s'\n", str);
    return 0;
}

这个想法是保持一个单独的读和写指针(pr用于阅读和pw对于写入),始终推进读取指针,并且仅当写入指针不指向给定字符时推进写入指针。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 C 字符串中删除所有出现的给定字符? 的相关文章

随机推荐

  • 连接到 Visual Studio Online 构建/测试任务中的外部服务

    我们正在 TFS Online 上运行构建和测试流程 这工作正常 直到我们尝试连接到外部服务 在我们的例子中是 SQL 数据库 在这种情况下 关于我们应该模拟什么 不应该模拟什么的讨论并没有多大帮助 因为目前我们需要这样做 我们也尝试了一个
  • Flutter - 为什么 AlertDialog 中的滑块不更新?

    我正在做一个 AlertDialog 所以当我尝试将 Slider 小部件插入值状态中时 听起来真的很奇怪 如果 Slider 位于 AlertDialog 之外 则不会发生这种情况 new Slider onChanged double
  • 如何在rmarkdown文档中设置rpivotTable的大小

    我想包括几个rpivotTablermarkdown HTML 输出中的 s 文档 flexdashboard 其他生成独立 HTML 文件的选项都可以 我不能为此使用 Shiny 如何为此 htmlwidget 指定固定宽度和 或高度 我
  • 从 PyQt 事件循环中执行 Python 代码

    我正在测试使用 PyQt 构建的 gui 我希望能够使用 PyQt 事件循环启动后执行的 python 代码与 gui 进行交互 app exec 另一种说法是我想打电话给app exec 立即返回 就好像 gui 是无模式的一样 然后是与
  • 错误:未加载库:iOS 版 Flutter 中的 @rpath/libswiftCore.dylib

    我在 android studio 中使用 flutter 来构建我的 iOS 应用程序 我有XCode 13是安装在mac上的 我最近从 windows 转到了 mac 我的全部迷你应用程序运行良好在 iPhone 模拟器上除了我的两个主
  • 设置 SaveFileDialog 的初始目录?

    我想要一个具有以下行为的 SaveFileDialog 第一次打开它时 它会转到 我的文档 然后 它会转到最后选择的文件夹 实现这一目标的最佳方法是什么 如果我不设置 InitialDirectory 它将转到 exe 的目录 这不是我想要
  • Rails 3 UJS - 控制器被 link_to 调用两次:remote

    我有一个奇怪的问题 JQuery 正在为 link to 方法创建两个 AJAX 请求 我正在使用 JQuery for UJS 开发 Rails 3 应用程序 我有一个切换链接 可以在 关注 和 取消关注 之间切换 我的链接呈现如下 sp
  • Class::getInstance 的起源/解释?

    我对经典继承相当陌生 因为我主要处理 ECMAScript 和 Python 尽管我也使用过相当多的 PHP 不寒而栗 我知道它深受 Java 和其他基于继承的经典语言的影响 问题 我查看了框架中的几个类 注意到没有调用 new 关键字 至
  • 洋葱架构身份框架

    我正在关注洋葱架构 http jeffreypalermo com blog the onion architecture part 1 我正在使用 ASP NET Identity Framework 这是我的项目结构 1 Core Do
  • Python Click:使用手动将 Option 对象附加到 Command 实例时出现 NoSuchOption 异常

    我的代码示例 import click def std cb ctx param standardize if standardize opt click Option param decls a help this option only
  • MongoDB $gt/$lt 运算符,价格存储为字符串

    我正在尝试查询数据库中大于 小于用户指定数字的价格 在我的数据库中 价格的存储方式如下 price 300 00 根据文档 这应该有效 db products find price gt 30 00 pretty 但我没有得到返回的结果 我
  • 深度比较 JavaScript 函数

    我正在阅读 Eloquent JavaScript 第三版 尽管我在 SO 上看到过一两个不同的答案 它们在执行逻辑上几乎与我的相同 但无论我如何调整它 我的工作似乎都不起作用 目标 创建一个深度比较函数 可以比较两个对象 并根据它们的属性
  • 使用 htaccess 将 http url 重定向到 https url

    我在 htaccess 文件中使用以下代码将 www 重定向到非 www 域 要求如下 RewriteCond HTTPS off RewriteCond HTTP HOST www example com RewriteRule http
  • Swift 3 中的托管对象上下文

    我想通过这个示例代码 https www brandpending com 2016 01 14 using core data in a swift cocoa app to populate an nstableview 其中使用Swi
  • 在使用框架 4.7.2 运行 SDK 项目的 vs2019 中,控件和表单缺少图标和视图设计器选项

    到目前为止的总结答案 如果 csproj user 文件存在 则表单和控件仅在设计器中打开 问题故事 I have 2 controls that both inherit from a base control However one i
  • 使用 SSL 的 SoapUI REST 模拟服务

    我在使用 SoapUI 5 0 0 时遇到问题 尝试使用 SSL 模拟 RESTFul 服务时 如果我根本不使用 SSL 一切都会正常 在 SoapUI 首选项中 我已在端口 8443 上启用模拟 SSL 并使用与模拟 KeyStore 和
  • ScrollView 在 swift 3 中添加子视图

    我想尝试在滚动视图上添加视图表单 但视图未完全添加到滚动视图的框架上 我的代码是 import UIKit class AddIncomeVC UIViewController IBOutlet var scrollView UIScrol
  • 在 Jest 中使用绝对路径

    我创建了一个应用程序创建反应应用程序 我已经设置了 env my NODE PATH src 当我启动时一切正常反应脚本启动但当我启动时反应脚本测试我有一个错误 找不到导入 在我的包 json test jest colors covera
  • 使用 PuTTY Plink 从批处理文件执行“su”

    我在尝试让我的批处理文件也为我提供 PuTTY Plink 中的超级用户访问权限时遇到问题 我可以自动输入 IP 和密码 但我也想将其自动化到它也会给我的地方su当我运行这个批处理文件时访问 到目前为止 它运行到了我需要手动输入的地步su但
  • 如何从 C 字符串中删除所有出现的给定字符?

    我正在尝试从 C 中的字符串中删除一个字符 我的代码遇到的问题是 它从字符串中删除了该字符的第一个实例 但也擦除了字符串中该字符之后的所有内容 例如 从 hello 中删除 l 会打印 he 而不是 heo int i char str1