【问题标题】:Concatenate string with ASCII用 ASCII 连接字符串
【发布时间】:2017-03-01 10:25:41
【问题描述】:

我想实现这样的目标: (A) (B) (C) (D)... (I) (J)

for (int i = 1; i <= 10; i++){
    battlefield[i][0] = "(" + (64 + i) + ")";

我想到了将 ASCII 值放入 String 的想法,但它会导致错误:

表达式必须具有整数或无范围枚举类型

如果我尝试编译它,我得到了

错误 C2110: '+' : 不能添加两个指针

基本上,使这个编译的唯一方法是在 (64+i) 之前添加 to_string,但后来我得到了类似的东西: (65) (66) (67),而我想要那些 ASCII 值下的字母

【问题讨论】:

  • battlefield是什么类型?
  • "(" + (64 + i) + ")" 该表达式没有做任何接近您可能想要的事情。请使用battlefield 的请求类型更新您的问题。
  • 字符串战场[11][11];
  • 为什么要使用二维数组?
  • @AGasior 你可以使用battlefield[i][0] = std::string("(") + (64 + i) + ")";

标签: c++ string ascii


【解决方案1】:

在使用operator+ 之前,您必须将字符串文字转换为std::string。这样做的一种方法

std::vector<std::string> battlefield(10);

for (char i = 0; i < 10; i++)
{
    battlefield[i]  = "(";
    battlefield[i] += 'A' + i;
    battlefield[i] += ")";
}

demo

【讨论】:

    【解决方案2】:

    您的连接表达式不正确,因为它混合了类型:

    "(" + (64 + i) + ")"
    

    您可以通过将中间部分 (64 + i) 设置为单个字符串而不是 int 来修复它:

    battlefield[i][0] = "(" + string(1, 64+i) + ")";
    

    构造函数string(1, 64+i) 从字符64+i(第二个参数)的一个重复(第一个参数)生成一个字符串。有了这个表达式,C++ 就有足够的信息来从"("")" 构造字符串对象。

    【讨论】:

      【解决方案3】:

      我想我会倾向于:

      1. 使用从零开始的索引

      2. 使用字符文字“A”作为基础,以使转换显式。

      3. 将字符串的生成提升成一个小函数

      类似这样的:

      #include <string>
      
      auto& make_entry(std::string& cell, int index)
      {
        cell += '(';
        cell += char('A' + index);
        cell += ')';
        return cell;
      }
      
      int main()
      {
        std::string battlefield[10][1];
        for (int i = 0; i < 10; i++){
          make_entry(battlefield[i][0], i);
        }
      }
      

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        battlefield[i][0] = std::string("(") + (char) ('A'+i) + std::string(")");
        

        错误消息的原因是,当您编写"(" 时,您使用的是原始的C 风格char*,并且您不能添加两个指针(您的错误消息所说的)。通过使用std::string 构造函数,您强制将值视为字符串,然后+ 运算符用于连接。

        【讨论】:

          【解决方案5】:

          您可以只对字母字符使用 ASCII 字符 连续 布局,编写一个带有从 char 索引从 'A''J'for 循环,并连接当前字符到结果字符串。
          在连接过程中,您也可以添加括号()

          例如:

          #include <iostream>
          #include <string>
          
          int main() {
              std::string result;
          
              for (char ch = 'A'; ch <= 'J'; ++ch) {
                  result += '(';
                  result += ch;
                  result += ')';
              }
          
              std::cout << result << '\n';
          }
          

          编辑如果你想要vector&lt;string&gt;,你可以修改上述代码,使用如下代码:

          #include <iostream>
          #include <string>
          #include <vector>
          using namespace std;
          
          int main() {
              vector<string> v;
          
              for (char ch = 'A'; ch <= 'J'; ++ch) {
                  string s;
                  s += '(';
                  s += ch;
                  s += ')';
                  v.push_back(s);
              }
          
              for (auto const& s : v) {
                  cout << s << ' ';
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2015-06-08
            • 1970-01-01
            • 1970-01-01
            • 2014-03-31
            • 1970-01-01
            • 1970-01-01
            • 2010-10-17
            相关资源
            最近更新 更多