c - 如何用C中的另一个字符串替换字符串中的字符
问题描述
假设我有这句话:
你好$,欢迎!
我必须用名称替换'$',结果应该是:
你好名字,欢迎!
现在我这样做了,但它只复制了短语的名称和第一部分:
char * InsertName(char * string, char * name)
{
char temp;
for(int i = 0; i < strlen(string); i++)
{
if(string[i] == '$')
{
for(int k = i, j = 0; j < strlen(name); j++, k++)
{
temp = string[k+2];
string[k] = name[j];
string[k+1] = temp;
}
return string;
}
}
return "";
}
如何移动名称后的所有元素,以便返回完整的字符串?
解决方案
您可以使用在C-stringsprintf()
上打印输出,模拟通过以下方式完成的工作:printf()
编辑:您必须包含这两个标题才能使此功能起作用:
#include <stdlib.h> #include <memory.h>
您正在尝试实现的实现:
char* InsertAt(unsigned start, const char* source, const char* target, const char* with,
unsigned * position_ret)
{
const char * pointer = strstr(source, target);
if (pointer == NULL)
{
if (position_ret != NULL)
*position_ret = UINT_MAX;
return _strdup(source);
}
if (position_ret != NULL)
*position_ret = (unsigned)(pointer - source);
char* result = calloc(strlen(source) + strlen(with) + strlen(pointer), sizeof(char));
sprintf_s(result, strlen(source) + strlen(with) + strlen(pointer), "%.*s%.*s%.*s",
(signed)(pointer - source), _strdup(source),
(signed)strlen(with) + 1, _strdup(with),
(signed)(strlen(pointer) - strlen(target)), _strdup(pointer + strlen(target)));
return result;
}
例子:
#define InsertAtCharacter(src, ch, with) InsertAt(0u, (src), \
(char[]){ (char)(ch), '\0' }, (with), NULL)
int main(void) { printf("%s", InsertAtCharacter("Hello $, Welcome!", '$', "Name")); return 0; }
推荐阅读
- javascript - No such file or directory after confirming the file exists
- python - Arguments passed to nested function with yield keyword
- database - MongoDB: A refers to B. Get A's whose B's satisfy some conditions
- python - 在 for 循环中将一个 numpy 数组添加到另一个 numpy 数组
- angular - 具有相同组件和不同参数的角路由器链接正在附加而不是路由
- swift - 在多部分函数上出现 PHP 500 内部错误
- c - 如何提取除初始两个字符外的所有子字符串?
- vba - 为什么要在 VBA 类模块中声明新类型?
- php - 当用户不想要照片时,邮件附件出现错误
- android - 如何在 Retrofit 中处理多种类型的错误响应