首页 > 解决方案 > 首先打印给定序列中的所有数字,然后使用 Array 打印所有字符和其他符号

问题描述

如何首先打印给定序列中的所有数字,然后仅使用数组而不是 C++ 中的字符串打印所有字符和字母???

例如

intput: 5 (size of array) --> a 1 2 r 4

output: 1 2 4 a r

input: 10 --> a s d @ # $ 7 8 9 1 0

output: 7 8 9 1 0 a s d @ # $
#include <iostream>
 
int main()
{
    int n, c, j = 0, m = 0, a = 0;
    char arr[1000];
        std::cin >> n; 
        for (int i = 0; i < n; ++i)
            {
                std::cin >> arr[i];
                std::cout << arr[i] << " ";
            }
}

标签: c++arraysalgorithm

解决方案


如果您现在想坚持使用循环,只需使用cctypefor标头中的一些帮助程序来清理您的代码:

#include <cctype>

for (int i = 0; i < n; i++) {
    if (std::isdigit(arr[i]))
        std::cout << (char)arr[i] << ' ';
}
for (int i = 0; i < n; i++) {
    if (std::isalpha(arr[i]))
        std::cout << (char)arr[i] << ' ';
}
for (int i = 0; i < n; i++) {
    if (!std::isdigit(arr[i]) && !std::isalpha(arr[i]))
        std::cout << (char)arr[i] << ' ';
}

这段代码绝对不是最优的,正如你可以从其他人的更优雅的解决方案中看到的那样std::partition。一旦您对自己的技能更有信心,请考虑尝试一种算法方法:标准库有很多选择std::partition在这里工作得很好,但您也可以尝试使用排序或删除算法。所有这些功能需要的是您的数据范围(在您的情况下,&arr[0]或者arr是范围的开始,并且arr + n是结束),通常是一些函数来指定您希望如何对数据进行分区、排序等。


推荐阅读