簡體   English   中英

如何用C中的另一個字符串替換字符串中的字符

[英]How to replace a character in a string with another string in 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 "";
}

如何移動名稱后的所有元素,以便返回完整的字符串?

您可以使用sprintf()C-string打印輸出,模擬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; }

嘗試這個 !!!

#include <stdio.h>
#include <string.h>
char* replace(char* str, char* a, char* b)
{
    int len  = strlen(str);
    int lena = strlen(a), lenb = strlen(b);
    for (char* p = str; p = strstr(p, a); ++p) {
        if (lena != lenb) // shift end as needed
            memmove(p+lenb, p+lena,
                len - (p - str) + lenb);
        memcpy(p, b, lenb);
    }
    return str;
}
int main()
{
    char str[80] = "Hello $,Welcome!";
    printf("%s\n", replace(str, "$", "name"));
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM