C++使用指针合并文本
C++ merging text using 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;
}
您的问题是这种循环:
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;
}
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 使用C++程序合并排序没有得到正确的输出
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 合并文本文件不同行中的重复项
- 将所有 *.txt 文件合并到一个文本文件中,其名称由用户使用 C++ 提供
- 拆分和合并文本
- 将两个文本文件合并为一个会给出不同的输出
- 合并两个文本文件会产生奇怪的结果
- 用C++将两个文本文件合并到第三个文本文件中
- C++使用指针合并文本
- 库合并两个文本文件
- 合并两个文本文件排序