gpt4 book ai didi

C++ 仅当模板为字符串类型时才执行小写转换

转载 作者:行者123 更新时间:2023-11-27 22:45:37 25 4
gpt4 key购买 nike

你好,

我正在使用模板编写一个简单的 C++ 链表。我已经让一切正常工作,但我想通过将所有字符转换为小写来使其不区分大小写以增加功能,因为模板是字符串类型。

因此,我编写了以下代码片段来处理任何单词并将其转换为所有小写:

        #define TEMPLATE string // changing this changes the template type in the rest of the program
Stack <TEMPLATE> s; //not used in this example, but just to show that I have an actual template for a class declared at some point, not just a definition called TEMPLATE
TEMPLATE word; // User inputs a word that is the same type of the Linked List Stack to compare if it is in the Stack.
cin >> word; // just showing that user defines word
for (unsigned int i = 0; i < word.length(); i++)
{
if (word.at(i) >= 'A' && word.at(i) <= 'Z')
word.at(i) += 'a' - 'A';
}

问题是,当我的 Stack 的 TEMPLATE 以及随后与堆栈进行比较的单词不是字符串类型时,它显然会抛出错误消息,因为 for 循环是专门为查看字符串而编写的。

那么,有没有办法让这个函数更通用,以便可以传递任何类型? (我不这么认为,因为不会对整数等进行错误检查。字符串是唯一依赖于它的)

或者,有没有一种方法可以只在我的 Stack 模板和比较变量的类型为字符串时执行上述代码?

我研究了异常处理,但我非常习惯 Python 的工作方式,所以我无法弄清楚如何在 C++ 中实现。

附带说明一下,我没有使用任何内置函数将字符串转换为所有小写字母,因此这也不是一个选项,我也不是在寻找这些建议。

最佳答案

创建重载以规范化数据:

std::string normalize(const std::string& s) {
std::string res(s);
for (auto& c : res) {
c = std::tolower(c);
}
return res;
}

template <typename T>
const T& normalize(const T& t) { return t; }

关于C++ 仅当模板为字符串类型时才执行小写转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43386290/

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