【问题标题】:Why isn't it possible to append an element of a string by its index number to a new string in C++?为什么不能通过索引号将字符串的元素附加到 C++ 中的新字符串?
【发布时间】:2018-09-10 16:37:29
【问题描述】:

我之前一直在使用 Python 进行编程。我一直在尝试在 C++ 中复制类似的方法。

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

我想要实现的一个示例是: 用户输入:航空 输出: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++ 中不可能做到这一点,但无法得到答案。你能告诉我为什么吗?

【问题讨论】:

  • 试试even.append(str[j]);
  • 它应该是 at(),而不是 at[]
  • 我尝试了 () 和 []。他们都给我编译时错误。我相信问题出在其他地方!
  • 我建议包括&lt;string&gt;

标签: c++ string append


【解决方案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]);
    

【讨论】:

    【解决方案2】:

    因为没有采用单个字符的.append 重载(您也有语法错误)。有几种方法可以做到这一点。

    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]);

    【讨论】:

    • 换句话说:RTFM。
    • 我不接受粗鲁人的建议。有点礼貌。对您使用的语言有一定的控制权。毕竟每个人都是错误地学习的。你也经历了同样的学习阶段。你不平凡
    猜你喜欢
    • 2015-05-31
    • 2014-10-10
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多