如何编写一个读入的程序,键盘上的一组字符并将它们输出到控制台。数据随机输入,但有选择地输出。控制台上仅显示唯一字符。因此,无论数组出现多少次,每个字符都应显示一次。
例如,如果是数组
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] << " ";
}
}
答案 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
的变量是数字类型(例如int
或float
)。
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
评论不正确。 if
在else
完成之前不会结束。
您可能希望在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;