C++ C++;唯一字符检查
我有下面的代码,其中对于唯一检查部分,无论我输入什么,都表示所有字符都是唯一的。在案例2中,我有没有逻辑上遗漏什么C++ C++;唯一字符检查,c++,c++builder,C++,C++builder,我有下面的代码,其中对于唯一检查部分,无论我输入什么,都表示所有字符都是唯一的。在案例2中,我有没有逻辑上遗漏什么 ***case 2: { { for(int i=0;i<counter;i++) for(int j=1;j<counter;j++) //I THINK THIS US WHERE SOME THING WENT WRONG { // LOGICALLY. W
***case 2: {
{
for(int i=0;i<counter;i++)
for(int j=1;j<counter;j++) //I THINK THIS US WHERE SOME THING WENT WRONG
{ // LOGICALLY. WHAT IS THAT THAT HAS TO BE
//CHANGED.
if(array[i] == array[j]) { flag == 1; }
else flag = 0;
}
}
if(flag == 1) { cout<<"\n All characters in the sentence are not unique"; }
else if(flag == 0) { cout<<"All are unique characters"; }
};break;***
}
***案例2:{
{
对于(int i=0;i有两件事不对,首先:
flag==1是一个比较,而不是赋值,因此在您的情况下,您的flag永远不会设置为1。
其次,j不应从1开始,而是从i+1开始
另一方面,您在每次检查时都设置了标志,因此本质上只检查最后一次比较。
当您发现某个字符不是唯一的时,您可能希望尽早退出循环。有两件事是错误的,首先:
flag==1是一个比较,而不是赋值,因此在您的情况下,您的flag永远不会设置为1。
其次,j不应从1开始,而是从i+1开始
另一方面,您在每次检查时都设置了标志,因此本质上只检查最后一次比较。
当您发现某个字符不是唯一的时,可能希望尽早退出循环。有两件事是错误的:
首先,我认为内部循环应该是
for (int j=i+i; j<counter; j++)
for(int j=i+i;j有两件事不对:
首先,我认为内部循环应该是
for (int j=i+i; j<counter; j++)
for(int j=i+i;j如果条件应该是(i!=j&&array[i]==array[j])
和标志==1
不是赋值,而是比较,应该改为标志=1
除了更改if
条件外,您还可以在i+1
处开始计算j
bool flag = false;
for(int i=0; i<counter && !flag; ++i)
{
for(int j=i+1; j<counter; ++j)
{
if( array[i] == array[j] )
{
flag = true;
break; // exits the inner for loop only.
}
}
}
cout << flag ? "\n All characters in the sentence are not unique" :
"All are unique characters";
break; // exits switch statement.
bool标志=false;
对于(int i=0;i而言,if
条件应为(i!=j&&array[i]==array[j])
和标志==1
不是赋值,而是比较,应更改为标志=1
除了更改if
条件外,您还可以在i+1
处开始计算j
bool flag = false;
for(int i=0; i<counter && !flag; ++i)
{
for(int j=i+1; j<counter; ++j)
{
if( array[i] == array[j] )
{
flag = true;
break; // exits the inner for loop only.
}
}
}
cout << flag ? "\n All characters in the sentence are not unique" :
"All are unique characters";
break; // exits switch statement.
bool标志=false;
对于(int i=0;i,正如已经回答的,代码中有几个错误
flag=1
对于检查条件….i!=j&&array[i]==array[j]
但理想情况下,这种类型的唯一字符检查并不是最优化的解决方案。您需要一个大小为255的整数数组,其所有内容都初始化为零。对于遇到的每个字符,请转到ASCII值位置并将值递增1。完成此操作后,如果存在值为0的任何成员,请在数组中进行交叉检查大于0或1。如果遇到字符串中存在重复项!正如已经回答的,代码中有几个错误
flag=1
对于检查条件….i!=j&&array[i]==array[j]
但理想情况下,这种类型的唯一字符检查并不是最优化的解决方案。您需要一个大小为255的整数数组,其所有内容都初始化为零。对于遇到的每个字符,请转到ASCII值位置并将值递增1。完成此操作后,如果存在值为0的任何成员,请在数组中进行交叉检查大于0或1。如果遇到,字符串中存在重复项!我认为编译器应该警告您无效代码标志==1
?我认为编译器应该警告您无效代码标志==1
?:咯咯笑。现在您在自己的解决方案中使用了“flag==true”赋值。:-):咯咯笑。现在您正在自己的解决方案中使用“flag==true”赋值。:-)