c - C在字符之间更改字符串
问题描述
假设我有一个字符串“hello_from_here”。我想更改“_”之间的子字符串,例如“hello_21223_here”。
我想我应该使用strtok
,但到目前为止我还没有成功。
到目前为止,我正在尝试做:
char input[] = "this_is_name";
char* first_part = strtok(input, "_");
char* second_part = strtok(strtok(input, "_"), "_");
char output[64];
int pos = 44;
snprintf(output,sizeof(output),"%s%06d%s", first_part, pos, second_part);
我知道这snprintf
是正确的,但我失败了strtok
。
输出是:
this000044this
我的目标输出是:
this000044name
解决方案
这是我的尝试
#include <stdio.h>
void replacemarks(char *dst, const char *src, char c, const char *r) {
while (1) {
while (*src && (*src != c)) *dst++ = *src++;
if (*src == 0) break;
*dst++ = *src++;
if (*src == 0) break;
const char *cc = strchr(src + 1, c);
if (cc) {
const char *rr = r;
while (*rr) *dst++ = *rr++;
src = cc;
*dst++ = *src++;
} else {
while (*src) *dst++ = *src++;
break;
}
}
*dst = 0;
}
int main(void) {
char line[100];
while (fgets(line, sizeof line, stdin)) {
char src[100], c, r[100], dst[100];
sscanf(line, "%s %c%s", src, &c, r);
replacemarks(dst, src, c, r);
printf("replacemarks(..., \"%s\", '%c', \"%s\") ==> \"%s\"\n",
src, c, r, dst);
}
return 0;
}
使用输入运行的示例
hello_from_here _ 21223 this_is_name _ 000044 阿布拉卡达布拉 r foo *一二三* * - - *一二三四* * - - *一二三四 * - - 一二三四* * - - *一二三四五* * - - *一二三四五 * - - 一二三四五* * - -
输出(针对堆栈溢出进行了美化):
替换标记(...,“hello_from_here”,“_”,“21223”)==>“hello_21223_here” 替换标记(...,“this_is_name”,“_”,“000044”)==>“this_000044_name” replacemarks(..., "abracadabra", 'r', "foo") ==> "abrfoora" replacemarks(..., "*one*two*three*", '*', "----") ==> "*----*two*----*" replacemarks(..., "*one*two*three*four*", '*', "----") ==> "*----*two*----*four*" replacemarks(..., "*one*two*three*four", '*', "----") ==> "*----*two*----*four" replacemarks(..., "一*二*三*四*", '*', "----") ==> "一*----*三*----*" replacemarks(..., "*一*二*三*四*五*", '*', "----") ==> "*----*二*----*四* ----*” replacemarks(..., "*一*二*三*四*五", '*', "----") ==> "*----*二*----*四*五" replacemarks(..., "一*二*三*四*五*", '*', "----") ==> "一*----*三*----*五* "
推荐阅读
- mysql - nodejs 服务器 docker 容器无法连接到 mysql docker 容器(ECONNREFUSED)
- python - How to check for words that are not immediately followed by a keyword, how about words not surrounded by the keyword?
- android - x + 宽度必须 <= bitmap.width()
- python - pip install setup.py extras_require 引用 git+ssh 和其他 extras_require
- automated-tests - 赛普拉斯测试数据生成脚本不作为测试套件的一部分
- javascript - 如何使用 2 个 observable 发出的值作为 http 请求的参数,其中 1 个 observable 将另一个设置为默认值?
- spring - 类中的字段值不会使用 Spring Boot MVC 控制器更新
- json - 请求 JSON 不会自动映射到 DTO 或 VO 对象
- c# - c# 使用 Process.Start(ProcessStartInfo info) 的程序不起作用
- php - 具有动态类名的 PHP 简单 HTML Dom 访问元素