向char数组添加2个字符

时间:2014-03-27 22:08:51

标签: c++ arrays

我有一个关于如何在char数组中添加2个字符的问题,我不知道问题出在哪里,但我想在每个'c'和'd'之后添加任何字符,如'A',但它不起作用正确的,我的意思是如果输入是“abcde”它显示输出像这样的“abcdeA”, 如果输入“abcdecde”,它显示“abcdecdedA”,但我想像这样“abcdAecdAe”,可以帮助我,这是我的代码。

void StrAdd_A_afterEach_CD(char *p1){
    char s[100];
    char *p2 = &s[0];
    int c1=0,c2=0;
    while(*p1!='\0')
    {
        if(*p1++=='c')
            if(*p1=='d')
            {
                p1--;
                *p2++ = *p1++;
                *p2++ = *p1++;
                *p2 = 'A';
                p2++;
                c1++;
            }   
        else 
        {
            p1--;p1--;
            *p2 = *p1;
            p1++;p2++;
            c2++;
        }

    }
    *p2 = '\0';
    p2-=(c2+c1);
    p1-=c2;

    while(*p2!='\0')
    {
        *p1 = *p2;
        p1++;p2++;
    }
    *p1 = '\0';
}

int main(){

    char s1[100];
    gets(s1);
    StrAdd_A_afterEach_CD(&s1[0]);
    cout<<s1;

    cout<<endl;
    return 0;
}

我不想将函数更改为任何返回类型,例如char on * func。或者用功能来做,因为我正在学习基础知识,但请帮我修改代码,谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 至少您遇到错误的问题是您要更改参数p1的地址,而且您不会存储初始地址,这是您追加A的原因。
  2. 您没有将所有字符添加到s字符串
  3. 希望代码在下面有所帮助。

    void StrAdd_A_afterEach_CD(char *param)
    {
        char* p1 = param;
    
        char s[100] = {0};
        char *p2 = s;
    
        while( *p1 )
        {
            bool processed = false;
            if(*p1 == 'c')
            {
                if(*(p1+1)=='d')
                {
                    processed = true;
    
                    *p2++ = *p1++;
                    *p2++ = *p1++;
                    *p2++ = 'A';
                }
            }
            if( ! processed )
            {
                *p2++ = *p1++;
            }
    
        }
        *p2 = '\0';
    
        // the following block is = strcpy(param, s);
        {
            p2 = s;
            while (*p2)
            {
                *param++ = *p2++;
            }
    
            *param = '\0';
        }
    }