将C程序转换为C++
Convert C program to C++
帮助!我正试图弄清楚教授给我们的这个代码——
#include <stdio.h>
#include <string.h>
void encrypt(int offset, char *str) {
int i,l;
l=strlen(str);
printf("nUnencrypted str = n%sn", str);
for(i=0;i<l;i++)
if (str[i]!=32)
str[i] = str[i]+ offset;
printf("nEncrypted str = n%s nlength = %dn", str, l);
}
void decrypt(int offset, char *str) {
// add your code here
}
void main(void) {
char str[1024];
printf ("Please enter a line of text, max %d charactersn", sizeof(str));
if (fgets(str, sizeof(str), stdin) != NULL)
{
encrypt(5, str); // What is the value of str after calling "encrypt"?
// add your method call here:
}
}
我们应该做以下事情:
将
C
代码转换为C++
。在"解密"方法中添加代码以解密加密文本。
将代码更改为使用
pointer
操作而不是array
操作来加密和解密消息。在main方法中,调用"decrypt"方法来解密加密文本(str)。
这是我所能做到的,但我现在几乎陷入了困境。尤其是因为我没有C
语言的背景。如有任何帮助,我们将不胜感激。
#include <iostream>
#include <string.h>
void encrypt(int offset, char *str)
{
std::cout << "nUnencrypted str = n" << str;
char *pointer = str;
while(*pointer)
{
if (*pointer !=32)
*pointer = *pointer + offset;
++pointer;
}
std::cout <<"nEncrypted str =n" << str << "nnlength = ";
}
void decrypt(int offset, char *str) {
// add your code here
}
void main(void) {
char str[1024];
std::cout << "Please enter a line of text max " << sizeof(str) << " charactersn";
if (fgets(str, sizeof(str), stdin) != NULL)
{
encrypt(5, str); // What is the value of str after calling "encrypt"?
// add your method call here:
}
}
您发布的代码应该在C++和C中工作。不需要"转换"任何东西,除非有您没有告诉我们的特定需求。
数组到指针的转换看起来是正确的,尽管我认为数组形式的代码更可读
对于decrypt
方法,您需要编写与encrypt
方法相反的代码。最好的方法是通过encrypt
运行一些示例文本,并检查输出的样子。该函数一次将输入转换为一个字符,因此您应该能够逐字节地将输入映射到输出。有了这些信息,您可以检测模式并构造一个函数,使转换朝另一个方向进行。
大多数格式良好的C代码都可以作为C++编译,将文件重命名为.cpp,使用C++编译编译代码并修复中断。main()作为返回void的声明至少应该中断(它充其量是有问题的C代码,并且是明确不正确的C++)。
这完全取决于你的教授对你的期望;"将其转换为C++"的要求过于模糊。您希望使用C++的哪些功能?。虽然从技术上讲,简单地重新编译为C++使其成为C++代码(即使它也是有效的C代码),但我不知何故怀疑这是否是练习的意图。
重点是,虽然通过重新编译进行表面转换是可能的,但C++提供了以不同方式进行编码的机会。例如:
-
头文件名
<stdio.h>
和<string.h>
在C++中已弃用,您可以改用<cstdio>
和<cstring>
。该代码中所说的<string.h>
是多余的;没有任何代码依赖于它。 -
如果使用不推荐使用的标头,则所有标准库都在
std::
命名空间中,因此所有标准库符号都需要通过前缀std::
或(不太好)使用using namespace std'
指令来进行范围解析。 -
该代码使用C标准库,它也是C++标准库的一部分,但C++有许多方面更优越的替代方案。例如,
<cstdio>
在很大程度上被<iostream>
及其衍生物(如<stringstream>
和<fstream>
)所取代,并且字符串处理和事实上的字符串数据类型由<string>
提供。使用<iostream>
和<string>
来实现该代码可以极大地简化 -
如果要使用
std::string
类,那么可以使用迭代器遍历字符串内容。 -
C++支持OOP。在这种情况下,您可以创建一个同时包含加密和解密方法的类。尽管在这种情况下这样做的论点可能很弱,除了举例说明你对这个概念的理解。
所以你可以看到"转换"的范围非常广泛,从几乎没有工作到完全重新设计。在设计说明中,我要做的一件事是将加密/解密方法与输出操作分离。如果这些方法不坚持将结果输出到控制台,那么它们将是可重用的。他们最好将数据返回给调用者,调用者可以用它做它需要的事情。当然,这也可能超出了本练习的范围,因为这就是向你展示作业的方式。
- C++实用程序::转换在静态链接库中不起作用
- 如何将我的小程序转换为用于项目的函数?
- 将通用Windows应用程序转换为VisualStudio 2019上的常规应用程序
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- 将 C 程序转换为具有大量字符* 和无符号字符转换错误的C++
- 将视觉C 媒体基础捕获应用程序转换为C 构建器
- Qt 创建器中的实用程序::转换::to_string_t中的链接错误
- 将Parralel CUDA程序转换为顺序运行
- Pthreads - 将顺序程序转换为并行程序
- 尝试将工作python程序转换为C++但不起作用
- 将带有 std::cout C++程序转换为 NCurses / CDK
- 面向对象设计-将C应用程序转换为C++
- 将带有迭代器的C++程序转换为 Boost MPI 并行程序
- 可视化如何将项目 win32 控制台应用程序转换为C++ Windows 窗体
- 如何使用 openMP 将顺序程序转换为并行程序
- 将C++程序转换为使用 GMP
- 如何将 C 程序转换为类
- 将命令行参数程序转换为菜单驱动程序
- 将C++程序转换为 C#
- 必须执行哪些操作才能将程序转换为强大的 OpenMP 感知版本