为什么不能通过索引号将字符串元素附加到C ++中的新字符串中?

时间:2018-04-01 04:08:27

标签: c++ string append

我以前用Python编程。我一直试图在C ++中复制类似的方法。

我打算做什么:从用户通过“cin”获取“N”的个案数,并且对于每个案例,请输入字符串“str”。遍历字符串“str”的每个索引,打印偶数索引位置的元素,然后是空格,然后是奇数索引位置的元素。

我想要实现的一个例子是: 用户输入: Aeronautics 输出: Arnuis eoatc

下面显示的程序是我的C ++代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {

    int N;
    cin>>N;
    for(int i=0; i < N; i++){
        string str;
        cin>>str;
        string even;
        string odd;
        for(int j=0; j < str.size(); j++){
            if (j % 2 == 0){
                even.append(str.at[j]);
            }
            else if (j % 2 != 0){
                odd.append(str.at[j]);
            }
        cout<<even<<" "<<odd<<endl;
        }
    }

    return 0;
}

下面显示的错误消息是在我尝试运行上述代码时直接从我的编译器获得的:

solution.cc: In function ‘int main()’:
solution.cc:20:37: error: invalid types ‘<unresolved overloaded function     type>[int]’ for array subscript
                 even.append(str.at[j]);
                                     ^
solution.cc:23:36: error: invalid types ‘<unresolved overloaded function     type>[int]’ for array subscript
                 odd.append(str.at[j]);
                                    ^

根据我的理解,编译器说我不能以这种方式将字符串的索引元素附加到另一个字符串。我试图在其他论坛上搜索C ++无法实现的原因,但无法得到答案。你能告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

你有几个错误。

  1. str.at[j]必须为str.at(j)str[j]
  2. 您使用的string::append()版本需要另一个参数。

    basic_string& append( size_type count, CharT ch );
    

    您需要使用:

    even.append(1, str[j]);
    

    odd.append(1, str[j]);
    

答案 1 :(得分:1)

因为没有.append重载需要一个char(你也有语法错误)。有几种方法可以做到这一点。

even += str[j]; ... odd += str[j];

或使用边界检查

even += str.at(j); ... odd += str.at(j);

或者,如果您仍想使用.append

even.append(1, str[j]); ... odd.append(1, str[j]);