【问题标题】:What does this mean in c++?这在 C++ 中是什么意思?
【发布时间】:2021-04-22 20:20:54
【问题描述】:
chk[c - 'A'] = true;

这在 C++ 中是什么意思? 我试图解决回文重排序,但我无法理解这部分。

这里是完整的代码:

int cnt = 0;
bool chk[26];
string s, ans = "";

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> s;
    for (char& c : s) {
        if (!chk[c - 'A']) {
            chk[c - 'A'] = true;
            cnt++;
        }
        else {
            ans += c;
            chk[c - 'A'] = false;
            cnt--;
        }
    }
    if (cnt >= 2) {
        cout << "NO SOLUTION" << endl;
        return 0;
    }
    cout << ans;
    for (char c = 'A'; c <= 'Z'; c++) {
        if (chk[c - 'A']) {
            cout << c;
        }
    }
    reverse(ans.begin(), ans.end());
    cout << ans;
    return 0;
}

【问题讨论】:

  • 我试图解决回文重排序问题 -- 所以你使用 C++ 语言来解决这个问题,但不知道你使用的计算机语言的基础知识?
  • chk 似乎是一个数组或一些布尔值容器,其中 chk[0] 表示字符 A。
  • 如果您从这些在线编码竞赛网站之一收到有关“回文重排序”的问题,请注意,这些网站上提出的问题假定您知道您将使用的计算机语言。这些网站不能替代学习 C++。
  • 这是一个赋值表达式。
  • 大概,c 是一个整数。当您从中减去 'A' 时,实际上是从 c 中减去 65(65 是 A 的 ASCII 码)。然后,您使用这个结果整数来索引大概是数组chk,并在数组中的该位置分配值true。

标签: c++ string char


【解决方案1】:

[A-Z] 的字符分别在 ASCII table、c - 'A' 中具有值 65-90跟踪字符串中现有的大写字母以重新排序回文。

更好的方法是使用现代 C++ 容器,例如 std::unordered_map:

#include <unordered_map>
#include <string>

int main() {
    std::unordered_map <char, bool> letterExists;
    std::string str;
    for (auto c : str)
        letterExists[c] = true;
}

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-03-09
    • 2012-05-04
    • 2013-05-16
    相关资源
    最近更新 更多