2014-03-27 27 views
0

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

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 * * func。或者用功能来完成它,因为我正在学习基础知识,但请帮我解决这个问题,谢谢。

+0

使用'std :: vector',整个** mess **消失。 –

+0

你为什么这么做C方式? C++可以像C一样行事,但它存在是有原因的。 – 2014-03-27 22:12:40

+0

感谢您的帮助,但我不想要矢量,因为直到现在我还没有学到它,我想要像C++,而不使用函数或向量,并且不更改'void',谢谢 – user3457718

回答

0
  1. 至少,你做错了的一个问题是,你正在改变参数p1的地址,以及为什么你
  2. 你不是追加A.你不存储的初始地址将所有字符添加到s字符串中

希望代码可以帮助。

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'; 
    } 
} 
+0

谢谢,先生,帮助我。现在我学会了如何做到这一点,问题完成后,再次感谢您。 – user3457718