gpt4 book ai didi

c++ - 如何找到 std::strings 数组的长度?

转载 作者:行者123 更新时间:2023-11-30 04:04:46 24 4
gpt4 key购买 nike

我有几个问题与我的部分代码有关。

第一个与我如何找到 string 数组的长度有关。我将以下内容用作我正在使用的微积分工具的 map 。

std::string dMap[][10] = {{"x", "1"}, {"log(x)", "1/x"}, {"e^x", "e^x"}};

我想知道如何做相当于

int arr[] = {1, 69, 2};
int arrlen = sizeof(arr)/sizeof(int);

具有 std::string 类型的元素数组。 此外,是否有更好的方法来存储 (f(x), f'(x)) 对的符号表示?我尽量不使用 C++11。

我的下一个问题与我编写的无法正常工作的程序有关。在这里:

std::string CalculusWizard::composeFunction(const std::string & fx, const char & x, const std::string & gx)
{
/* Return fx compose gx, i.e. return a string that is gx with every instance of the character x replaced
by the equation gx.
E.g. fx="x^2", x="x", gx="sin(x)" ---> composeFunction(fx, x, gx) = "(sin(x))^2"
*/
std::string hx(""); // equation to return

std::string lastString("");
for (std::string::const_iterator it(fx.begin()), offend(fx.end()); it != offend; ++it)
{
if (*it == x)
{
hx += "(" + gx + ")";
lastString.erase(lastString.begin(), lastString.end());
}
else
{
lastString.push_back(*it);
}
}

return hx;
}

首先,程序中的错误在哪里?当我测试它时它不工作。

其次,当尝试再次使字符串为空时,这样做是否更快

lastString.erase(lastString.begin(), lastString.end());

lastString = ""; 

???

感谢您的宝贵时间。

最佳答案

问题 1) 了解您不能也确实不需要以这种方式计算 String 的大小。只要问它有多大,它就会告诉你。

// comparing size, length, capacity and max_size
#include <iostream>
#include <string>

int main ()
{
std::string str ("Test string");
std::cout << "size: " << str.size() << "\n";
std::cout << "length: " << str.length() << "\n";
std::cout << "capacity: " << str.capacity() << "\n";
std::cout << "max_size: " << str.max_size() << "\n";
return 0;
}

http://www.cplusplus.com/reference/string/string/capacity/

至于字符串数组,请阅读以下内容: How to determine the size of an array of strings in C++?

查看 David Rodríguez 的回答。

问题 2) 更好的方法可能是定义一个 FunctionPair类取决于你对他们做什么。 Vector<FunctionPair>可能会派上用场。

如果FunctionPair没有以任何与之关联的行为(功能)结束,那么一个结构可能就足够了:std::pair<std::string, std::string>也可以被插入一个 vector 中。

除非您打算使用一个函数字符串查找另一个函数字符串,否则您不需要 map 。 http://www.cplusplus.com/reference/map/map/

问题 3) 更好地描述什么不起作用会有所帮助。我注意到 lastString不影响 hx完全没有。

问题 4)“第二”此时 Fastest 无需担心。写下最容易看的东西,直到所有的错误都消失了。 “过早的优化是万恶之源”,Donald Knuth。

提示:查看 replace 是如何实现的功能可能会帮助您进行组合替换: http://www.cplusplus.com/reference/string/string/replace/

关于c++ - 如何找到 std::strings 数组的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23622082/

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