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


在 C++ 环境中,迭代语句是一个复合语句或原因语句,可以一次执行零次或多次。此过程受循环终止过程的约束。当存在 break 语句或语句的延续时,语句按特定顺序执行。

C++ 中存在四种类型的迭代:

  • While

  • Do

  • For

  • 基于范围的 for

此处提到的每个循环都会迭代特定条件,直到其终止。当语句时,表达式计算结果为零。迭代语句不能被视为声明。在这些语句中,while 和 do 语句不适用增量。但是,对于 for 和基于范围的 for,增量是运行方法的必须条件。

以下是迭代方法的一些特性:

  • 初始猜测 – 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++ 环境中复制字符串对象

#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 =

使用迭代方法将一个字符串复制到另一个字符串

对于迭代,我们可以将每个字符内容从 s100 复制到 s200,从表示为 0 的特定索引开始。通过实现此方法,每次调用都会将每个索引增加 1。为此,s100 字符串不会到达终止。时间复杂度为 O(m),其中 m 是字符串的长度,辅助空间为 O(1),其中正在使用额外的空间。

示例 3

#include <bits/stdc++.h>
using namespace std;
// declare a function to override the method to a particular data string onanother void string
// lets assume we have enough space

void myCopy(char s100[], char s200[]) {
   int a = 0;
   for (a=0; s100[a] != '\0'; a++)
   s200[a] = s100[a];
   s200[a] = '\0';
}

// Declare the driver function to go further
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;

// Apply function to copy one string in to other string by using recursion method
void myCopy(char s1997[], char s2001[], int index = 0) {

   // copying every character from the string s1997 to string s2001
   s2001[index] = s1997[index];

   // if the operated string reachs to the end then stop and terminate the process
   if (s1997[index] == '\0')
   return;

   // increase the string characters by one to stop the termination
   myCopy(s1997, s2001, index + 1);
}

// Declare the driver function to go for the next
int main() {
   char s1997[1000] = "RDDARBINDBD";
   char s2001[1000] = "";
   myCopy(s1997, s2001);
   cout << s2001;
   return 0;
}

输出

RDDARBINDBD

结论

今天在这篇文章中,我们学习了如何在 C++ 环境中使用迭代和递归将字符串数据从一个复制到另一个。这里我们提到了可能的算法并根据逻辑构建了 C++ 代码。希望这将帮助您对此处讨论的主题有一个广泛的了解。

更新于: 2023 年 4 月 5 日

467 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告