复制字符串的函数(迭代和递归)

c++server side programmingprogramming更新于 2025/5/30 15:07:17

在 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++ 代码。希望这能帮助您对此处讨论的主题有一个广泛的了解。


相关文章