c++ - 数字向后的指针
问题描述
我需要在(0-9)之间接收不确定数量的整数。使用此数字,将它们向前和向后打印,然后擦除角落的数字。
例子:
3 5 1 9 4 6 2 4 4 2 6 4 9 1 5 3 5 1 9 4 6 2 4 4 2 6 4 9 1 5 1 9 4 6 2 4 4 2 6 4 9 1 9 4 6 2 4 4 2 6 4 9 4 6 2 4 4 2 6 4 6 2 4 4 2 6 2 4 4 2 4 4
这是我到目前为止的代码:
#include <iostream>
using namespace std;
int a;
int p;
int set;
void numberss()
{
for set[](int a=0; a<p; a++)
}
int main()
{
cin >> p;
cin >> a;
const int SIZE = p;
int set[] = {a};
int *numPtr;
numPtr = set;
for (int index = 0; index < SIZE; index++)
{
cout << *numPtr << " ";
numPtr++;
}
for (int index = 0; index < SIZE; index++)
{
numPtr--;
cout << *numPtr << " ";
}
return 0;
}
解决方案
您的代码不起作用,因为您没有从用户输入中读取所有数字,您只是在读取计数和第一个数字。此外,您没有循环足够的次数以三角形方式输出数字,您只输出三角形的第一行。
试试这个:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int p;
vector<int> set;
cin >> p;
set.resize(p);
for (int i = 0; i < p; ++i)
cin >> set[i];
for (int index = 0; index < p; index++)
{
int *numPtr = &set[index];
for (int i = 0; i < index; ++i)
cout << " ";
for (int i = index; i < p; ++i)
cout << *numPtr++ << " ";
for (int i = index; i < p; i++)
cout << *--numPtr << " ";
cout << endl;
}
return 0;
}
话虽这么说,这里有一种替代方法,它使用迭代器而不是指针,并使用 STL 算法,它更多的是 C++ 风格,更少的是 C 风格。此外,您应该始终在使用之前验证用户输入:
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
#include <limits>
#include <iterator>
#include <cstdint>
using uint16vec = std::vector<uint16_t>; // there is no operator>> for uint8_t...
int main()
{
size_t count = 0;
std::cin >> count;
uint16vec set;
set.reserve(count);
for (size_t i = 0; i < count; ++i)
{
uint16vec::value_type num;
while (!((std::cin >> num) && (num <= 9)))
{
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
std::cout << "Enter a valid number 0..9!" << std::endl;
}
set.push_back(num);
}
auto begin = set.begin(), end = set.end();
auto rbegin = set.rbegin(), rend = set.rend();
auto out = std::ostream_iterator<uint16vec::value_type>(std::cout, " ");
std::cout << std::setfill(' ');
for (size_t i = 0; i < count; ++i)
{
std::cout << std::setw((i*2)+1);
std::copy(begin++, end, out);
std::copy(rbegin, rend--, out);
std::cout << std::endl;
}
return 0;
}
推荐阅读
- excel - Copy column (vertical) selection to reverse paste row (horizontal)
- alfresco - 如何使数字字段自动递增?
- python - 组的相关性和加入 DataFrame
- servicestack - 没有被重定向到剃刀视图,而是使用 servicestack 5.1 查看快照页面
- ios - 快速拍照时前置摄像头自动缩放
- java - JasperReportsPdfView 在我的 Spring Boot 中无法解析。
- java - 不支持 Spring Boot 安全请求方法“POST”
- angular - 等待Http调用Angular 4 ForkJoin
- ldap - Tuleap LDAP 错误编号:32
- c# - How to invoke C# method from PowerShell whose signature has parameters marked with 'params'