C ++:数组函数

时间:2011-11-27 13:40:33

标签: c++

如何编写一个读入的程序,键盘上的一组字符并将它们输出到控制台。数据随机输入,但有选择地输出。控制台上仅显示唯一字符。因此,无论数组出现多少次,每个字符都应显示一次。

例如,如果是数组

Char letterArray[ ] = {B,C,C,X,Y,U,U,U};

输出应为:

B,C,X,Y,U

这是我到目前为止所做的......

char myArray [500];
int count = 0;
int entered = 0;
char num;

while (entered < 8)
{
    cout << "\nEnter a Character:";
    cin >> num;

    bool duplicate = false;
    entered++;

    for (int i = 0; i < 8; i++)
    {
        if (myArray[i] == num)
            duplicate=true;
    }

    if (!duplicate)
    {
        myArray[count] = num;
        count++;
    } // end if
    else
        cout << num << " character has already been entered\n\n";

    // prints the list of values
    cout<<"The final Array Contains:\n";

    for (int i = 0; i < count; i++)
    {
        cout << myArray[i] << " ";
    }
}

3 个答案:

答案 0 :(得分:0)

我相信你可以使用std::set<>

集合是一种存储唯一元素的关联容器&lt; ...&gt; 元素总是按照特定的严格弱排序标准从低到高排序设置

答案 1 :(得分:0)

创建一个用false初始化的大小为128(假设您正在处理ASCII)的数组会更有效。每次获得一个字符时,检查其ASCII值,如果该值的数组为true,则不打印它。之后,将字符值上的数组值更新为true。类似的东西:

bool *seenArray = new bool[128]();

void onkey(char input) {
    if(((int)input) < 0) return;
    if (!seenArray[(int)input]) {
         myArray[count] = input;
         count++;
         seenArray[(int)input] = true;
    }         
}

答案 2 :(得分:0)

仔细查看代码......

char myArray [500];

为什么500?你从不使用超过8个。

char num;

令人困惑的命名。大多数程序员都希望名为num的变量是数字类型(例如intfloat)。

while (entered < 8)

考虑将8替换为常量(例如const int kMaxEntered = 8;)。

cin >> num;

cin可能是行缓冲的;即在输入整行之前它什么都不做。

for (int i = 0; i < 8; i++)
{
    if (myArray[i] == num)
        duplicate=true;
}

您正在访问myArray的未初始化元素。提示:你的循环大小不应该是8。

如果发现重复,请考虑使用continue;

if (!duplicate)
{
    myArray[count] = num;
    count++;
} // end if
else
    cout << num << " character has already been entered\n\n";

您的// end if评论不正确。 ifelse完成之前不会结束。

您可能希望在else子句周围添加大括号,或者通过将其两行合并为一行if来删除myArray[count++] = num;子句中的大括号。

// prints the list of values
cout<<"The final Array Contains:\n";

for (int i = 0; i < count; i++)
{
    cout << myArray[i] << " ";
}

每次输入一个输入时都打印列表?

除非您特别想要微观管理缓冲,否则不要在\n的文本中使用cout。相反,请使用endl。此外,始终在<<之类的二元运算符周围放置空格,并且不要随机大写单词:

cout << "The final array contains:" << endl;
for (int i = 0; i < count; i++)
    cout << myArray[i] << " ";
cout << endl;