我一直试图让它工作一段时间,但错误要么太模糊,要么是不相关的东西。 我对编码很陌生,所以更复杂的解决方案对我来说可能太多了。
int main() {
string NATOltr[27]{ ' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
string NATOwrd[27]{ "-","alfa","bravo","charlie","delta","echo","foxtrot","golf","hotel","india","juliett","kilo","lima","mike","november","oscar","papa","quebec","romeo","sierra","tango","uniform","victor","whiskey","xray","yankee","zulu" };
vector<string> input3xt{ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' };
vector<string> output3xt;
for (int i = 0; i <= input3xt.size(); i++) {
for (int j = 0; j <= 26; j++) {
if (input3xt[i] == NATOltr[j]) { (output3xt[i] = NATOwrd[j]) ;
output3xt.push_back(i)
std::cout << "_"; }
}
}
for (int i = 0; i < output3xt.size(); i++) {
std::cout << output3xt[i] << "\n";
}
}
通常输入向量或循环数没有定义,但我试图隔离问题。我正在尝试制作一个北约字母切换器,在线编译器只会给出其他错误,而 Visual Studio 将我发送到这段代码:
_NODISCARD _CONSTEXPR20 size_type size() const noexcept {
auto& _My_data = _Mypair._Myval2;
return static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst);
}
_NODISCARD _CONSTEXPR20 size_type max_size() const noexcept {
return (_STD min)(
static_cast<size_type>((numeric_limits<difference_type>::max)()), _Alty_traits::max_size(_Getal()));
}
_NODISCARD _CONSTEXPR20 size_type capacity() const noexcept {
auto& _My_data = _Mypair._Myval2;
return static_cast<size_type>(_My_data._Myend - _My_data._Myfirst);
}
_NODISCARD _CONSTEXPR20 _Ty& operator[](const size_type _Pos) noexcept /* strengthened */ {
auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
_STL_VERIFY(
_Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0
return _My_data._Myfirst[_Pos];
}
_NODISCARD _CONSTEXPR20 const _Ty& operator[](const size_type _Pos) const noexcept /* strengthened */ {
auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
_STL_VERIFY(
_Pos < static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst), "vector subscript out of range");
#endif // _CONTAINER_DEBUG_LEVEL > 0
return _My_data._Myfirst[_Pos];
}
_NODISCARD _CONSTEXPR20 _Ty& at(const size_type _Pos) {
auto& _My_data = _Mypair._Myval2;
if (static_cast<size_type>(_My_data._Mylast - _My_data._Myfirst) <= _Pos) {
_Xrange();
}
编辑:做了一些建议的更改,忘记了我最初使用的是字符向量,重新添加了它。 编辑 2:谢谢 paulmckenzie 和 thomas-matthews 向我展示在表格类别中,如果有疑问,请始终使用不同的类型。 现在我该如何关闭它?
如评论中所述,您正在尝试使用
[]
来索引没有元素的向量。
output3xt[i] = NATOwrd[j]
如 cppreference.com 的文档中所述,这会调用未定义的行为。
与 std::map::operator[] 不同,此运算符从不向容器中插入新元素。通过此运算符访问不存在的元素是未定义的行为。
std::map
来模拟字符到字符串的映射。如果你这样做,那么这将成为 std::transform
的一个非常简单的应用。
#include <map>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
int main() {
std::map<char, std::string> nato_map = {
{' ', "-"}, {'a', "alpha"}, {'b', "bravo"}, {'c', "charlie"},
{'d', "delta"}, {'e', "echo"}, {'f', "foxtrot"}, {'g', "golf"},
{'h', "hotel"}, {'i', "india"}, {'j', "juliet"}, {'k', "kilo"},
{'l', "lima"}, {'m', "mike"}, {'n', "november"}, {'o', "oscar"},
{'p', "papa"}, {'q', "quebec"}, {'r', "romeo"}, {'s', "sierra"},
{'t', "tango"}, {'u', "uniform"}, {'v', "victor"},
{'w', "whiskey"}, {'x', "xray"}, {'y', "yankee"}, {'z', "zulu"}
};
std::string input = "hello world";
std::vector<std::string> output;
std::transform(
input.cbegin(), input.cend(),
std::back_inserter(output),
[&](auto ch) { return nato_map[ch]; }
);
for (auto s : output) {
std::cout << s << "\n";
}
}