C ++使用指针合并文本

时间:2015-11-13 12:53:02

标签: c++ pointers

我正在尝试学习一些这种美丽的语言,但我一直坚持这一点。问题是:为什么最后一次统计仅显示Witaj PJC而不显示Witaj Cpp PJC?如您所见,功能应用程序必须将已转换的第二个单词添加到第一个单词。 谢谢你的帮助。

如果你能给我任何关于指针的好教程,我会很感激。谢谢!

#include <iostream>
#include <string.h>
using namespace std;

void app(char *str2, char *str1){


    for(int i =0; i < strlen(str2); i++){
        *(str2++);
    }

    for(int i =0; i < strlen(str1); i++){
        *(str1++);
    }
    for(int i =0; i < strlen(str1); i++){

        *(str2)=*(str1);
        *(str2)++;
        *(str1)--;
    }
}

int main()
{
 char *str1 = "ppC ";

 char str2[20] = "Witaj";

 cout << str2 << endl;    // Witaj

 app(str2, str1);

 cout << str2 << endl;    // Witaj Cpp shows WitCpp

 app(str2, "CJP ");

 cout << str2 << endl;    // Witaj Cpp PJC shows WitPJ
    return 0;

}

2 个答案:

答案 0 :(得分:4)

你的问题就是这种循环:

for(int i =0; i < strlen(str2); i++){
    *(str2++);
}

您无法使用str2++移动指针,并期望strlen(str2)仍然返回原始指针的长度。

对于循环变量,在每次迭代中:

                 i  str2  strlen(str2)   condition
Iteration 1      0  Witaj     5            0 < 5  Ok
Iteration 2      1  itaj      4            1 < 4  Ok
Iteration 3      2  taj       3            2 < 3  Ok
Iteration 4      3  aj        2            3 < 2  Exit at 3rd character!!

因此......你只是&#34;移动&#34;你的指针3个字节。

更改该应用功能:

void app(char *str2, char *str1){

   int nstr2 = strlen(str2);
   int nstr1 = strlen(str1);


    for(int i =0; i < nstr2; i++){
        *(str2++);
    }

    for(int i =0; i < nstr1; i++){
        *(str1++);
    }

    for(int i =0; i < nstr1; i++){

        *(str2++)=*(--str1);
    }

}

无论如何......这个程序仅适用于学术人员,或者您正在考虑专业地使用它?

答案 1 :(得分:0)

对于一些只是字符串追加的功能代码,我潦草地写了这个......

请注意,您应该进行const调用,如果要反转其中一个字符串(从您的问题中有点不清楚),则应在追加之前完成。

使用新分配的字符串追加(相当不安全和基本)的示例:

char* app(char *str2, char *str1){

  char* appendedstring = (char*)malloc(sizeof(char)*20);
  char *temp = str1;
  char *temp2 = str2;
  int stringlen1 = strlen(str1);
  int stringlen2 = strlen(str2);

//Copy string 1
for (int i = 0; i < stringlen2; i++){
    appendedstring[i] = *temp2;
    temp2++;
}

//Append string 2
for (int i = 0; i < stringlen1 + 1; i++){

    appendedstring[stringlen2 + i] = *temp; 
    temp++;
}

  return appendedstring;
}

int main()
{
  int t;
  char *str1 = "ppC ";

  char str2[20] = "Witaj";

  cout << str1 << endl;

  cout << str2 << endl;    // Witaj

  char* newstr = app(str2, str1);

  cout << newstr << endl;    // Witaj Cpp shows WitCpp

  char* newstr2 = app(str2, "CJP ");

  cout << newstr2 << endl;    // Witaj Cpp PJC shows WitPJ


  return 0;

}