【问题标题】:Using String Size to Declare Array Size?使用字符串大小来声明数组大小?
【发布时间】:2012-11-29 00:09:01
【问题描述】:

在这里对不起初学者。我试图从 cin 函数中获取字符串大小,然后用它来声明数组大小。但它是说:

第 17 行:请求 'x' 中的成员 'size',它是非类类型 'std::string long int'。

虽然没有数组也可以正常工作。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int y;
    string x[y];
    cout << "Enter sequence" << endl;
    cin >> x[y];
    y = x.size;

    for (int i = 0; i > y; i++)
        cout x[i];

    cout << "The size of the sequence is " << x.size() << " characters." << endl;
}

【问题讨论】:

  • 您不能声明具有运行时大小的数组。为此使用std::vector。您可能还会混淆 for 循环的条件。
  • 我还没学过向量,有没有别的办法?
  • 我认为你想要的只是std::string x; std::cin &gt;&gt; x; std::cout &lt;&lt; x;。它与输入和输出配合得很好。您似乎正在尝试使用std::stringchar[] 的组合。不过,向量比其他方式简单得多。
  • @Foxic:不。现在了解向量,你会成为一个更好的人。花 30 分钟的时间是值得的。
  • 另外,我想备份并询问您要做什么。您问题的标题与代码不完全匹配。您想在这里解决什么问题?

标签: c++ arrays string size


【解决方案1】:

首先,不允许像您那样声明数组。我们来看看这两行代码

int y;
string x[y];

第二行代码中y的值是多少?它可以是任何东西。当然编译器不知道,数组大小必须在编译时确定。

您的问题有两种解决方案:

  1. 使用指针并动态分配数组。

  2. 使用 std::vector 并让标准库负责动态分配。

IMO,两者都是你应该在你的程序员工具带中拥有的工具,所以你应该学习如何做到这两个。您还应该了解这两种方法的优缺点,以便选择正确的方法来解决问题。

最后,您收到的错误消息意味着数组没有名为size() 的成员。如果您使用上述解决方案 1. 解决此问题,您需要自己跟踪大小。

【讨论】:

  • 哈,当我回答这个问题时,我实在是太累了.. 之后就立即上床睡觉了 :) 很惊讶没有大量的反对票。 +1 正确答案:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
相关资源
最近更新 更多