如何用C中的多个字符替换字符串char指针中的字符?

时间:2015-11-22 10:33:45

标签: c arrays string pointers

过了一段时间我正在做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。 &LT; AA&GT; YYY&LT; AA&GT; Y。我的所需输出是否与else块中的strcat一起使用。但如果我使用“* st ++ = * m”,它只打印''。那么我需要添加什么来使其打印预期的输出?

2 个答案:

答案 0 :(得分:1)

不确定为什么要这样做。无论如何,

char *st = (char*)malloc(sizeof(char));不是你想要的。你应该从char st[100] = "";开始。更准确地说,您需要找出原始字符串中的许多a,以找出malloc st的正确大小。

我不会将#define用于这些lltconst会更好:

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

if(*t == *l)将为if(*t == l)

通过这些更改,*st++ = *m;变为*(st + strlen(st)) = m;,这应该会产生预期的输出。

答案 1 :(得分:1)

  

@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;
}