gpt4 book ai didi

c++ - strchr 不适用于 char[]

转载 作者:行者123 更新时间:2023-11-28 03:40:20 26 4
gpt4 key购买 nike

我正在为 C++ 练习编写 ROT13。但是这里的这段代码返回错误并且无法编译,我不明白为什么!我在以下几行中发布了一段代码

string encode(string &x)
{
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";

for (size_t l=0;l<x.size();++l){
cout<<x[l];
cout<< strchr(alphabet,x[l]);
}
return x;
}

Q2。还帮我返回 alphabet[] 中匹配字母的索引(例如,'f' 为 5),我可以向其中添加 13 并将其附加到 x 等等。

Q3。除了实践,CS 中的哪门类(class)可以帮助我开发更高效的算法?是计算理论、离散数学还是算法?

最佳答案

按顺序,从问题 1 开始:

以下编译对我来说很好:

#include <iostream>
#include <cstring>

std::string encode(std::string &x)
{
char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
char *ptr;
for (size_t l=0;l<x.size();++l){
std::cout<<x[l];
std::cout<< std::strchr(alphabet,x[l]);
}
return x;
}

int main (int argc, char* argv []) {
return 0;
}

确保:

  • 您包括给定的 header ,用于 coutstrchr
  • 使用 std:: 前缀,除非您使用的是 std 命名空间。
  • 修复 ptr 问题。

问题 2:

如果您正在寻找方便的 ROT-13 方法,请考虑使用两个 C 字符串,一个用于源代码,一个用于翻译:

char from[] = "abcdefghijklmnopqrstuvwxyz";
char to [] = "nopqrstuvwxyzabcdefghijklm";

然后您可以使用 strchr 在第一个中查找它并使用该指针在第二个中找到等效项。

char src = 'j';
char *p = strchr (from, src);
if (p == NULL)
std::cout << src;
else
std::cout << to[p - from];

如果没有找到,将按原样输出字符,如果找到,则查找翻译。您可能还想将大写字母也放在那里。

问题 3:

如果你想学习高效的算法,我会去学习算法类(class) :-)

计算理论听起来有点枯燥,但它可能很好地涵盖了算法背后的理论基础。离散数学适用于算法,但同样,它可能非常理论化。这一切都基于单词的意思,当然,实际涵盖的学科领域可能完全不同,因此您可能应该与提供类(class)的人协商。

额外的一点:

如果您正在寻找可以与自己的作品进行比较的东西,这是我根据上述建议整理的:

#include <iostream>
#include <cstring>

std::string rot13 (std::string x)
{
char from[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char to [] = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
std::string retstr = "";
for (size_t i = 0; i < x.size(); ++i) {
char *p = std::strchr (from, x[i]);
if (p == 0)
retstr += x[i];
else
retstr += to[p - from];
}
return retstr;
}

int main (int argc, char* argv []) {
std::string one = "This string contains 47 and 53.";
std::string two = rot13 (one);
std::string three = rot13 (two);
std::cout << one << '\n';
std::cout << two << '\n';
std::cout << three << '\n';
return 0;
}

返回字符串的构建可能会更有效地完成(例如一个新的字符数组,它只在最后变成一个字符串)但它很好地说明了该方法的“查找”部分。

输出是:

This string contains 47 and 53.
Guvf fgevat pbagnvaf 47 naq 53.
This string contains 47 and 53.

你可以验证here ,如有必要。

关于c++ - strchr 不适用于 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com