C ++独特的字符检查

时间:2013-06-10 09:15:14

标签: 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. 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;***        
}

4 个答案:

答案 0 :(得分:1)

有两件事是错的,首先是: flag == 1是比较,而不是赋值,因此在您的情况下,您的标志永远不会设置为1。 其次,j不应该从1开始,而是从i + 1开始。

在旁注中,您使用每个检查设置标志,因此基本上您只检查最后一个比较。 当你发现一个角色不是唯一的时候,你可能想早点离开你的圈子。

答案 1 :(得分:0)

有两件事是错的:

首先我认为内循环应该是

for (int j=i+i; j<counter; j++)

否则,假设i = 2,你会将数组[2]与自身进行比较(如果j和i都是2)

另外,关于标志,每当你找到不同的字符时都不应该将它设置为0(省略else子句),因为在某处找不同的字符并不意味着重置你的标志'见过平等的人。而是在第一个循环之前设置flag= 0

编辑:而且,正如其他人所指出的那样,设置标志是用“=”而不是“==”完成的,所以我们至少有三个错误。

答案 2 :(得分:0)

if条件应为(i!=j && array[i]==array[j])flag == 1不是作业,而是比较,应更改为flag = 1

您可以开始计算if j,而不是更改i+1条件。我对重写代码的建议看起来像这样

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.

答案 3 :(得分:0)

如前所述,您在代码中有几处错误,

  1. flag = 1
  2. 检查条件..... i!=j && array[i] == array[j]
  3. 但理想情况下,这种独特的字符检查不是最优化的解决方案。您需要一个大小为255的int数组,其所有内容都初始化为零。对于遇到的每个字符,转到ASCII值位置并将值递增1.完成此操作后,如果存在任何值不是0或1的成员,则交叉检查数组。如果遇到,则在字符串中存在重复!