复制字符串的函数(迭代和递归)
在 C++ 环境中,迭代语句是复合语句或原因语句,可以一次执行零个或多个。此过程受循环终止过程的影响。当存在 break 语句或语句的延续时,语句将按特定顺序执行。
C++ 中有四种迭代类型 -
While
Do
For
基于范围的 for
此处提到的每个循环都会迭代特定条件,直到终止。语句时表达式的计算结果为零。迭代语句不能被视为声明。在这些语句中,没有增量不适用于 while 和 do 语句。但是,对于和基于范围的增量,必须运行该方法。
以下是迭代方法的一些特点 -
初始猜测 - 1
开括号类型
收敛速度非常快
收敛是一个线性过程
方法正在修改
准确性非常好
编程工作量非常容易
递归是 C++ 中的一个特定函数,它以重复的方式直接或间接调用自身,直到满足特定条件。递归函数没有基本情况。在递归中,有两种情况可以执行代码
递归条件 - 它有助于在循环中重复编码操作。它节省时间并降低代码的复杂性。
基本条件 - 它有助于条件终止进程。
C++ 中的迭代算法
这是使用迭代方法复制字符串的基本算法,通过迭代方法,条件将以重复的方式运行,直到终止。
步骤 1 - 开始
步骤 2 - 读取 x0 和 e 的值。 (e 是期望的精度)
步骤 3 − x1 = g(x0) 计算
步骤 4 − 如果 [x1 – x0] <= e,则执行步骤 6
步骤 5 − 否则,分配 x0 = x1 并转到步骤 3。
步骤 6 − 显示 x1 作为根。
步骤 7 − 停止
C++ 中的递归算法
以下是用于复制 C++ 环境的字符串的递归方法算法,通过该算法逻辑条件将运行直至终止。
步骤 1 − 开始
步骤 2 − 定义基数情况。
步骤 3 − 定义递归情况。
步骤 4 − 确保递归终止。
步骤 5 − 合并解决方案。
发送 6 − 结束
使用迭代复制函数的语法
template<class InputIterator, class OutputIterator> OutputIterator copy (InputIterator first content, InputIterator last content, OutputIterator result content){ while (first!=last) { *result = *first; ++result; ++first; } return result; }
这是复制特定元素的语法。该函数在目标末尾返回一个值作为迭代器。
使用递归复制函数的语法
int main(){ char str10[70], str20[80]; printf("Enter string to copy for this operation: "); scanf("%[^\n]s", str10); copy(str10, str20, 0); printf("Copying success for the operation.\n"); printf("The first string is here: %s\n", str10); printf("The second string is here: %s\n", str20); return 0; } void copy(char str1[], char str2[], int index) { str20[index] = str10[index]; // printf ("INDEX IS %d\n", index); if (str1[index] == '\0') return; copy(str10, str20, index + 1); }
在此语法中,使用递归复制()函数。子函数将控制值返回给该特定父函数,该控制值在字符串一中编码,并复制到字符串二中。基本流程和过程如下所述 -
char* strcpy(char* destination, const char* source); void recurse() { ... .. ... recurse(); ... .. ... } int main() { ... .. ... recurse(); ... .. ... }
通过"void copy (char[],char[],int);"定义一个函数。
此函数用于通过递归将一个字符串复制到另一个字符串。
向字符串添加值。
方法
方法 1 - 使用 C++ 复制字符串。
方法 2 - 使用迭代方法将一个字符串复制到另一个字符串。
方法 3 - 使用递归方法将一个字符串复制到另一个字符串。
使用 C++ 复制字符串
这里我们使用 strcpy() 和 cstring 函数在 C++ 环境中复制字符串。
示例 1:复制C++ 环境中的 sting 对象
#include <iostream> using namespace std; int main() { string s07, s16; cout << "Enter data in string s07: "; getline (cin, s07); s16 = s07; cout << "s07 = "<< s07 << endl; cout << "s16 = "<< s16; return 0; }
输出
Enter data in string s07: s07 = s16 =
示例 2:使用 C++ 复制 C 字符串
#include <iostream> #include <cstring> using namespace std; int main() { char s07[2022], s16[2022]; cout << "Enter some data input in string s07: "; cin.getline(s07, 2022); strcpy(s16, s07); cout << "s07 = "<< s07 << endl; cout << "s16 = "<< s16; return 0; }
输出
Enter some data input in string s07: s07 = s16 =
使用迭代方法将一个字符串复制到另一个字符串
对于迭代,我们可以从表示为 0 的特定索引开始,将每个字符内容从 s100 复制到 s200。通过此方法的实现,每次调用都会将每个索引增加 1。为此,s100 字符串不会到达终止点。时间复杂度为 O(m),其中 m 是字符串的长度,辅助空间为 O(1),其中使用了额外的空间。
示例 3
#include <bits/stdc++.h> using namespace std; // 声明一个函数以将方法覆盖为另一个 void 字符串上的特定数据字符串 // 假设我们有足够的空间 void myCopy(char s100[], char s200[]) { int a = 0; for (a=0; s100[a] != '\0'; a++) s200[a] = s100[a]; s200[a] = '\0'; } // 声明驱动函数以进一步执行 int main() { char s100[2022] = "ARBRDDINDBD"; char s200[2001] = ""; myCopy (s100, s200); cout << s200; return 0; }
输出
ARBRDDINDBD
使用递归方法将一个字符串复制到另一个字符串
实现递归过程,我们可以将字符串 s1997 中的每个字符复制到字符串 s2001。起始索引为 0,方法索引将增加 1,直到过程终止。对于此过程,时间复杂度为 O(m),其中 m 是特定字符串的长度。由于递归调用堆栈,此处的辅助空间也是 O(m)。
示例 4
#include <bits/stdc++.h> using namespace std; // 使用递归方法应用函数将一个字符串复制到另一个字符串 void myCopy(char s1997[], char s2001[], int index = 0) { // 将字符串 s1997 中的每个字符复制到字符串 s2001 s2001[index] = s1997[index]; // 如果操作的字符串到达末尾,则停止并终止该过程 if (s1997[index] == '\0') return; // 将字符串字符增加一个以停止终止 myCopy(s1997, s2001, index + 1); } // 声明驱动函数以进行下一个操作 int main() { char s1997[1000] = "RDDARBINDBD"; char s2001[1000] = ""; myCopy(s1997, s2001); cout << s2001; return 0; }
输出
RDDARBINDBD
结论
今天在本文中,我们学习了如何在 C++ 环境中使用迭代和递归将字符串数据从一个复制到另一个。这里我们提到了可能的算法,并根据逻辑构建了 C++ 代码。希望这能帮助您对此处讨论的主题有一个广泛的了解。