计算向量中偶数长度的单词

count even length words in vectors

本文关键字:单词 向量 计算      更新时间:2023-10-16

我有 2 个问题。

1) cout << v_setir.capacity();不返回正确的数字。

2)我想计算长度均匀的单词。 我应该用向量来做。

这是我的代码:

#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
int main()
{
    int say = 0;
    cout << "Setiri daxil edin: ";
    string setir;
    getline(cin, setir);
    vector<string> v_setir;
    string ifadeler;
    istringstream yig(setir);
    while (yig >> ifadeler)
        v_setir.push_back(setir);
    // First problem
    cout << v_setir.capacity() << endl;
    // Second problem
/*  for (size_t i = 0; i < v_setir.capacity(); i++)
    {
        if (v_setir[i].size() % 2 == 0)
            say += 1;
    }
    cout << "Uzunlugu cut olan sozerin sayi: " << say << endl;*/
    return 0;
}

例如,如果我输入这个字符串行,它会返回"6"(为什么我不知道):

嗨,你好,你好吗

出了什么问题?我的大脑停止了,我无法确定我的代码和/或算法中出了什么问题。

请帮我解决这些问题。

此致敬意。

capacity()是当前分配的空间,而不是向量中元素的数量。使用:改用size()

看:

  • http://en.cppreference.com/w/cpp/container/vector/capacity
  • http://en.cppreference.com/w/cpp/container/vector/size

你的循环现在应该可以正常工作,但你也可以看看那里的例子,它对可被 3 整除的整数做了类似的事情。

您可以使用 std::count_if 计算偶数长度的单词:

#include <algorithm>
int even_words = std::count_if(v_setir.begin(), v_setir.end(), [] (const string& str) { return str.size() % 2 == 0; });

1) cout << v_setir.capacity() ; 不返回正确的数字。

使用 vector::size 作为向量中元素的编号。

2)我想数长度均匀的单词。我应该用向量来做。

首先,您应该使用循环中的v_setir.size()而不是v_setir.capacity()作为条件。其次,你为什么不检查字符串的长度是否均匀呢?实际上,您将 5 个"嗨,你好,你好吗"放入向量中。

我认为你想把每个单词都放进向量中,而不是整个句子。如果那样,请使用v_setir.push_back(ifadeler);而不是v_setir.push_back(setir);

vector::capacity给出了向量的容量(它可以存储多少元素)。在这里,您要计算长度为偶数的字符串数。您需要遍历字符串并计算长度为偶数的字符串。

std::vector::capacity>= std::vector::size

  • 容量是矢量当前可以容纳的最大元素数。
  • 大小是向量中元素的数量。