C++使用指针合并文本

C++ merging text using pointers

本文关键字:合并 文本 指针 C++      更新时间:2023-10-16

我正试图学习一些这种优美的语言,但我一直在努力。问题是:为什么最后一次计数只显示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;
}

您的问题是这种循环:

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!!

因此。。你只"移动"你的指针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);
    }
}

不管怎样。。。这个程序只适用于学术海豚,或者你想专业地使用它?

对于一些仅用于字符串附加的功能代码,我潦草地写下了。。。

请注意,您应该改为进行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;
}