简单的C++程序,用于计算子字符串的实例数

simple C++ program to calculate number of instances of a substring

本文关键字:字符串 计算 实例 用于 C++ 程序 简单      更新时间:2023-10-16

有人可以指出以下代码中的错误吗?我正在使用一种天真的方法,即逐个字符比较两个字符串字符并更新变量"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]!='';i++)
{
       if(a[i]='')
       {break;} 
       if(s[i]==a[0])
         {
            for(j=i,k=0;a[k]!='';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。

问题出在这一部分:

if (a[i] = '')
{
  break;
}

首先,您使用的是=而不是==,但这不是问题的全部。要么将a[i]更改为s[i],要么注释掉整个块。我不明白为什么需要它。

我的提示和我的编码约定,以避免您使用=而不是==的错误:

if(a[i]='')

是将右值放在操作数的左侧,将左值放在右侧,如下所示:

if ('' == a[i])

这个约定将避免这样的错误(你会得到一个编译错误(:

if ('' = a[i])

此代码将生成编译错误:

Error   C2106   '=': left operand must be l-value