C++ C++;唯一字符检查

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

我有下面的代码,其中对于唯一检查部分,无论我输入什么,都表示所有字符都是唯一的。在案例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. 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”赋值。:-)