//编辑
下面的代码仅在str1只有1个str2开头字母的情况下有效;如何解决?
例如如果str1 / 2 =溢出/浮动,则可以正常工作。
// 我需要使用简单循环检查字符串中的单词。这个想法是:
。
#include <iostream>
using namespace std;
int main() {
string str1, str2;
int flag;
cout << "Enter a string 1: ";
getline(cin, str1);
cout << "Enter a string 2: ";
getline(cin, str2);
for(int i = 0; i < str1.size(); i++)
{
if (str1[i] == str2[0]) // find element in str1 that is equal to first element of str2
{
flag = 1; //
for(int j = i+1; j < i + str2.size(); j++)
if (str1[j] != str2[j-i]) // checking if following elements are also equal
{
flag = 0; // if any of them is not equal
break;
}
if (flag==1)
cout << "str2 is Substring of str1" ;
else
cout << "str2 is NOT Substring" ;
}
}
return 0;
}
答案 0 :(得分:0)
bool isSubStr(const string& parent, const string& child)
{
// Check each starting position
for (int i=0; i<(parent.size()-child.size()+1); ++i)
{
// Check if the substring starts at this position
// TODO make this a helper method to avoid the need for a flag
bool isSubString = true;
for (int j=0; j<child.size(); ++j)
{
if (parent[i + j] != child[j])
{
isSubString = false;
break;
}
}
if (isSubString)
{
return true;
}
}
return false;
}
答案 1 :(得分:0)
C ++中的字符串类包含一个名为 find 的函数,我认为应该使用该函数。
可以找到文档here。
关于返回值的摘录:
第一个匹配项的第一个字符的位置。
如果没有匹配项 找到后,该函数返回string :: npos。
#include <iostream>
using namespace std;
int main() {
string str1, str2;
cout << "Enter a string 1: ";
getline(cin, str1);
cout << "Enter a string 2: ";
getline(cin, str2);
size_t found = str1.find(str2);
if (found != string::npos)
cout << "str2 is Substring of str1" << endl;
else
cout << "str2 is NOT Substring" << endl;
return 0;
}
它更短,更容易理解。那么为什么不这样做呢?
否则,我认为您的代码在多个方面都是不正确的;例如
在您发表评论之后,我花了一些时间来尝试改进您的代码。
#include <iostream>
using namespace std;
int main() {
string str1, str2;
int flag = 0;
cout << "Enter a string 1: ";
getline(cin, str1);
cout << "Enter a string 2: ";
getline(cin, str2);
for(unsigned int i = 0; i < str1.size(); i++) {
if (str1[i] == str2[0]) { // find element in str1 that is equal to first element of str2
unsigned int j = 0;
for( ; j < str2.size(); j++) {
if ( str1[i+j] != str2[j] ) { // checking if following elements are also equal
break;
}
}
if ( j == str2.size() ) { // if j equals the size of substring then all chars seem equal
flag = 1;
break;
}
}
}
if ( flag )
cout << "str2 is Substring of str1" ;
else
cout << "str2 is NOT Substring" ;
return 0;
}