【问题标题】:How can I print the length of words stored in a string array in C++?如何在 C++ 中打印存储在字符串数组中的单词的长度?
【发布时间】:2021-11-05 05:16:37
【问题描述】:

我正在尝试获取 words长度,我存储在 字符串数组中。首先,我指定使用'n'(来自用户的输入)的数组中的单词,然后我从用户那里获取他们想要存储的'n'单词的输入。之后,我想打印一个单词的长度。

这里是代码......

#include <iostream>
using namespace std;

int main(){
    int n;
    cout<<"enter no"<<endl;
    cin>>n;
    string A[n];

     for(int i=0;i<n;i++){
         cin>>A[i];
    }
    cout<<strlen(A[2])<<endl;
} 

例如, 如果输入是:

3
leonardo
tom
brad

(它们分别写在不同的行中)

那么输出应该是:

4

这是brad的长度。

但是我在执行这段代码时遇到了一个奇怪的错误。 请提出一种方法来执行此操作,同时在单独的行中获取用户的输入

【问题讨论】:

  • 你有什么错误?你不使用std::string有什么原因吗?
  • strlen(A[2]) 应该是 A[2].size()strlen 不适用于std::string
  • 你的短节目有几个问题...首先是C++ doesn't have variable length arrays。其次,std::strlen 函数是一个旧的 C 库函数,它只处理 C 空终止字符串,也就是 char* 类型的字符串,而不是 std::string 对象。
  • 我很难相信这段代码是编译过的。您的意思是编译器错误吗?
  • 错误信息起初看起来很奇怪。阅读它们需要一些练习,但实际上它们通常包含大量信息,有时还会提示如何修复它们。如果您不理解它,您仍应将其包含在问题中,以便其他人解释它

标签: c++ arrays string


【解决方案1】:
cin>>n;
string A[n];

数组的大小必须在编译时知道。 C++ 不支持可变长度数组 (VLA)(一些编译器也将其作为扩展)。改用动态分配的容器,例如std::vector

std::cin >> n;    
std::vector<std::string> A(n);

并使用A[2].size() 而不是strlen(A[2])

【讨论】:

  • 谢谢我使用 A[2].size() 而不是 strlen(A[2]) 并且代码工作正常,没有错误。你仍然认为我应该使用向量而不是字符串吗?
  • 不需要调用resize,在定义A时传递大小即可:std::vector&lt;std::string&gt; A(n);
  • 希望你不介意我的编辑。有什么理由不使用std::vector&lt;std::string&gt; A(n);
  • 你的意思是向量而不是 C 数组?绝对地。现在你的代码只是“偶然”工作。
  • @AbhinavPipil -- 这不是关于向量而不是字符串;它是关于使用向量来保存字符串的集合。
【解决方案2】:

你应该使用:

cout << strlen(A[2].c_str());

而且,要使其工作,您还需要#include&lt;string.h&gt;

在不包含任何额外头文件的情况下,还有另外两种方法可以执行相同的功能。

第一种方法:

cout << A[2].size();

第二种方法:

cout << A[2].length();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多