我试图打印数组的前10个和最后10个元素。下面的尝试在无限循环中返回以下内容
Word: Count 0void printarrayString(std::string arr[], int size)
{
int i;
int j;
std::cout << "***first 10 elements***" << std::endl;
for (i = 10; i < size; i++)//print first 10 elements
std::cout << "Word: " << wordArr[i] << " " << "Occurs: " << countArr[i] << std::endl;
std::cout << std::endl;
std::cout << "***last 10 elements***" << std::endl;
for(j = 10; j < size-10; j-- ) //print last 10 elements
std::cout << "Word: " << wordArr[i] << " " << "Occurs: " << countArr[i] << std::endl;
std::cout << std::endl;
}如何修复循环,以便循环1打印wordArr和countArr的前10个元素,循环2打印最后10个元素?谢谢你
发布于 2020-09-04 03:33:51
你把指数搞错了。在C++中(甚至在大多数编程语言中),基元素或第一个元素位于索引0(想知道为什么吗?)。因此,要打印前n个元素,您需要从i = 0迭代到i = n - 1,也就是for(int i = 0; i < n; i++),并打印前n个元素,您需要从i = n - 1迭代到i = 0,也就是for(int i = n - 1; i >=0; i--)。
基于
PS: 0的索引=>,不需要额外的计算来在定位基后找到第一个元素;)
发布于 2020-09-04 08:35:36
如上所述,在C++中,数组索引是基于零的.此外,您应该检查是否实际有10个元素。“wordArr”和“countArr”是未定义的,可能是在其他地方声明的。这是我猜你想要达到的目标。std::min()函数来自算法std库。
#include <algorithm>
#include <iostream>
using namespace std;
void printarrayString(string arr[], int size)
{
//Check we have 10 elements. If not, use fewer
int nElementsToPrint = min(10,size);
//First 10 (if possible) elements
for(int i =0; i < nElementsToPrint; i++)
{
cout << "Word: " << arr[i] << " Occurs: " << i;
}
cout << endl;
//etc etc
}您可以以相同的方式处理最后10个元素,但是您还没有说过,如果您希望它们按照字符串中的顺序(从(size-nElementsToPrint)开始,然后用i++进行转发),或者先使用最后一个元素(从(size-1)开始,再向后执行i--)。
https://stackoverflow.com/questions/63734393
复制相似问题