查找小字符串在大字符串中的次数(c+;+;) < >我必须实现C++代码,以找出一个大字符串中出现的字符串的数目。对于eg-若大字符串是acacab,小字符串是aca,那个么答案应该是2。 通过编写以下代码,我没有得到正确答案: #include<iostream> #include<cstring> using namespace std; int main() { int i, j, k, c=0; char lstr[30],sstr[10],tstr[10]; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for(i=0;i<strlen(lstr);i++) { if(lstr[i]==sstr[0]) { j=i; for(k=0;k<strlen(sstr);k++,j++) { tstr[k]=lstr[j]; } } if(strcmp(tstr,sstr)==0) c++; } cout<<c; return 0; } #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; 这应该行得通,添加一个'\0'来终止c样式字符串,并在if(lstr[i]==sstr[0])语句中移动if(strcmp(tstr,sstr)==0)(否则,当lstr[i]!=sstr[0]时,您将继续递增c): #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; 这应该行得通,添加一个'\0'来终止c样式字符串,并在if(lstr[i]==sstr[0])语句中移动if(strcmp(tstr,sstr)==0)(否则,当lstr[i]!=sstr[0]时,您将继续递增c): #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; CUT如果使用C++字符串而不是C字符串,则更容易: int c=0; string lstr, sstr; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for (size_t pos = 0; (pos = lstr.find(sstr, pos)) != string::npos; pos++) { c++; } cout<<c; intc=0; 字符串lstr、sstr; CUT如果使用C++字符串而不是C字符串,则更容易: int c=0; string lstr, sstr; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for (size_t pos = 0; (pos = lstr.find(sstr, pos)) != string::npos; pos++) { c++; } cout<<c; intc=0; 字符串lstr、sstr; cout

查找小字符串在大字符串中的次数(c+;+;) < >我必须实现C++代码,以找出一个大字符串中出现的字符串的数目。对于eg-若大字符串是acacab,小字符串是aca,那个么答案应该是2。 通过编写以下代码,我没有得到正确答案: #include<iostream> #include<cstring> using namespace std; int main() { int i, j, k, c=0; char lstr[30],sstr[10],tstr[10]; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for(i=0;i<strlen(lstr);i++) { if(lstr[i]==sstr[0]) { j=i; for(k=0;k<strlen(sstr);k++,j++) { tstr[k]=lstr[j]; } } if(strcmp(tstr,sstr)==0) c++; } cout<<c; return 0; } #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; 这应该行得通,添加一个'\0'来终止c样式字符串,并在if(lstr[i]==sstr[0])语句中移动if(strcmp(tstr,sstr)==0)(否则,当lstr[i]!=sstr[0]时,您将继续递增c): #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; 这应该行得通,添加一个'\0'来终止c样式字符串,并在if(lstr[i]==sstr[0])语句中移动if(strcmp(tstr,sstr)==0)(否则,当lstr[i]!=sstr[0]时,您将继续递增c): #包括 #包括 使用名称空间std; int main() { int i,j,k,c=0; 字符lstr[30],sstr[10],tstr[10]; CUT如果使用C++字符串而不是C字符串,则更容易: int c=0; string lstr, sstr; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for (size_t pos = 0; (pos = lstr.find(sstr, pos)) != string::npos; pos++) { c++; } cout<<c; intc=0; 字符串lstr、sstr; CUT如果使用C++字符串而不是C字符串,则更容易: int c=0; string lstr, sstr; cout<<"Enter large string:"<<endl; cin>>lstr; cout<<"Enter small string:"<<endl; cin>>sstr; for (size_t pos = 0; (pos = lstr.find(sstr, pos)) != string::npos; pos++) { c++; } cout<<c; intc=0; 字符串lstr、sstr; cout,c++,string,C++,String,这将在O(n*m)复杂性中更有效地解决您的问题,其中n是大字符串大小,m是小字符串大小 #include<iostream> #include<cstring> using namespace std; int main() { int i, j, k, c=0; char lstr[30],sstr[10]; cout<<"Enter large string:"<<endl; cin>>lstr; cout<

这将在
O(n*m)
复杂性中更有效地解决您的问题,其中n是大字符串大小,m是小字符串大小

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
  int i, j, k, c=0;
  char lstr[30],sstr[10];
  cout<<"Enter large string:"<<endl;
  cin>>lstr;
  cout<<"Enter small string:"<<endl;
  cin>>sstr;
  for(i=0; lstr[i]; i++) // You don't need to calculate strlen each time. This loop will break when lstr reaches null ('\0') character
  {
    if(lstr[i]==sstr[0])
    {
        for(k=0,j=i; sstr[k] && lstr[j]; k++,j++) // don't need to calculate strlen each time
        {
            if(sstr[k]!=lstr[j])  // Break if not match
                break;
        }
        if(k==strlen(sstr)) // Whole string matched
            c++;
    }
  }
  cout<<c<<"\n";
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int i,j,k,c=0;
char-lstr[30],sstr[10];

cout这将在
O(n*m)
复杂性中更有效地解决您的问题,其中n是大字符串大小,m是小字符串大小

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
  int i, j, k, c=0;
  char lstr[30],sstr[10];
  cout<<"Enter large string:"<<endl;
  cin>>lstr;
  cout<<"Enter small string:"<<endl;
  cin>>sstr;
  for(i=0; lstr[i]; i++) // You don't need to calculate strlen each time. This loop will break when lstr reaches null ('\0') character
  {
    if(lstr[i]==sstr[0])
    {
        for(k=0,j=i; sstr[k] && lstr[j]; k++,j++) // don't need to calculate strlen each time
        {
            if(sstr[k]!=lstr[j])  // Break if not match
                break;
        }
        if(k==strlen(sstr)) // Whole string matched
            c++;
    }
  }
  cout<<c<<"\n";
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
int i,j,k,c=0;
char-lstr[30],sstr[10];

Coutht像一个魅力一样工作,谢谢。但是你能告诉我我的代码有什么问题吗?对不起,我是C++中的乞丐,所以我不能理解你做了什么!是STL吗?不,我根本没有使用STL。主要的“窍门”是使用<代码> STD::String::FAND()。对于大多数工作,不是自己实现字符串搜索。而且,我的版本将使用任何长度的字符串,而如果输入长,则代码容易受到缓冲区溢出的影响。它像一个符咒,谢谢。但是你能告诉我我的代码有什么问题吗?对不起,我是C++中的乞丐,所以我不能联合起来。derstand你做了什么!是STL吗?不,我根本没有使用STL。主要的“技巧”是使用
std::string::find()到大部分工作,而不是自己实现字符串搜索。此外,我的版本将使用任何长度的字符串,而如果输入长,则代码容易受到缓冲区溢出的影响。我尝试将“ABABA”作为大字符串和“AB”作为小字符串。欢迎,如约翰所说,最好使用C++中的字符串,生活会更容易。呃:我尝试了“ABBA”作为大字符串和“AB”作为小的字符串。欢迎,正如约翰所说,最好在C++中使用字符串,生命会更容易: