有人可以指出以下代码中的错误。我正在使用一种天真的方法,通过charcter比较两个字符串字符并更新变量'u'然后将其与子字符串的长度进行比较。如果这是真的,那么变量'c'将由一个单位更新。
C ++程序:
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main()
{
char s[50],a[20];
cin.getline(s,50);
cin.getline(a,20);
//int l=strlen(s);
int p=strlen(a);
int i,c=0,j,u=0,k;
for(i=0;s[i]!='\0';i++)
{
if(a[i]='\0')
{break;}
if(s[i]==a[0])
{
for(j=i,k=0;a[k]!='\0';j++,k++)
{
if(s[j]==a[k])
{
u++;
//continue;
}
//else
//break;
}
//cout<<endl<<u;
if(u==p)
{
c++;
}
}
u=0;
}
cout<<endl<<"count "<<c;
getch();
}
对于任何类型的输入组合,我输出为0。
答案 0 :(得分:2)
问题出在这一部分:
if (a[i] = '\0')
{
break;
}
首先,您使用的是=
而不是==
,但这不是整个问题。将a[i]
更改为s[i]
,或将整个块注释掉。我不明白为什么需要它。
答案 1 :(得分:1)
我的提示和我的编码约定,以避免您使用=
代替==
的错误:
if(a[i]='\0')
将rvalue放在操作数的左侧,将左值放在右侧,如下所示:
if ('\0' == a[i])
此约定将避免类似的错误(您将收到编译错误):
if ('\0' = a[i])
此代码将生成编译错误:
Error C2106 '=': left operand must be l-value