簡體   English   中英

如何用C中的多個字符替換字符串char指針中的字符?

[英]How to replace characters in a string char pointer with multiple characters in C?

一段時間后,我正在執行c編程,但遇到了問題。 我需要在指針中附加字符,如下所示。

#include<stdio.h>
#define l "a"
#define lt "<aa>"
#include<string.h>

main()
{
    char *st = (char*)malloc(sizeof(char));
    //char st[10];
    char *t = "abcdab";
    char *m ="y";

    while(*t)
    {
        if(*t == *l)
        {
            strcat(st, lt);
        }   

        else
        {
            //strcat(st, m); //strcat works in this case, But i need replacement.
            *st++ = *m; // How to make this line work to get desired output?
        }
        t++;
    }   
    printf("%s\n", st);
}   

如圖所示,該代碼由strcat運行。 但是我不想在else塊中使用strcat。 <aa> yyy <aa> y。 是我所需的輸出,可以在else塊中與strcat一起使用。 但是,如果我使用“ * st ++ = * m”,則僅打印“”。 那么,我需要添加什么才能使其輸出預期的輸出?

不知道為什么要這樣做。 無論如何,

char *st = (char*)malloc(sizeof(char)); 不是你想要的。 您應該以char st[100] = ""; 更正確的是,您將需要在原始字符串中找到許多a ,以找到st malloc的正確大小。

我不會對這些llt使用# #defineconst會更好:

const char l = 'a';
const char lt[] = "<aa>";

if(*t == *l)將是if(*t == l)

經過這些更改, *st++ = *m; 變成*(st + strlen(st)) = m; 這應該使預期的輸出。

@Michi "<aa>yyy<aa>y"應該是輸出。

您可以嘗試這樣的事情:

#include<stdio.h>
#include<stdlib.h>

char *foo(const char *src, const char ch){
    char *dest = malloc(25 * sizeof(char*));
    int i=0,j=0;

    while(src[i] != '\0'){
        if(src[i] == ch){
            dest[j] = '<';
            j++;
            dest[j] = ch;
            j++;
            dest[j] = '>';
            j++;
        }
        if(src[i] != ch){
            dest[j] = 'y';
            j++;
        }
        i++;
    }
    dest[j] = '\0';
    return dest;
}

int main(void){
    char *t = "abcdab";
    char l = 'a';

    char *arr = foo(t,l);

    printf("%s\n",arr);
    free(arr);
    return 0;
}

輸出:

<a>yyy<a>y

當然,您也可以在沒有malloc情況下執行此操作:

#include<stdio.h>

void foo(const char *src, const char ch){
    char dest[100];
    int i=0,j=0;

    while(src[i] != '\0'){
        if(src[i] == ch){
            dest[j] = '<';
            j++;
            dest[j] = ch;
            j++;
            dest[j] = '>';
            j++;
        }
        if(src[i] != ch){
            dest[j] = 'y';
            j++;
        }
        i++;
    }
    dest[j] = '\0';
    printf("%s\n",dest);
}

int main(void){
    char *t = "abcdab";
    char l = 'a';

    foo(t,l);
    return 0;
}

暫無
暫無

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

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