C++ 在c+;中查找c字符串子字符串时遇到问题+;

C++ 在c+;中查找c字符串子字符串时遇到问题+;,c++,c-strings,C++,C Strings,长期潜伏者,第一次海报。在过去的六个小时里,我一直在研究这个问题 问题: 实现以下功能。每个函数都处理以null结尾的C样式字符串。您可以假设传入函数的任何字符数组都将包含以null结尾的数据。将所有函数放在一个文件中,然后创建一个彻底测试函数的main()函数 注意:除了strlen()之外,您不能使用任何c字符串函数 我对第四个函数有问题。 所需的行为是:此函数以字符串s的形式返回可以首先找到子字符串的索引。例如,如果s为“摩天大楼”,子字符串为“ysc”,则函数将返回2。如果子字符串未出现

长期潜伏者,第一次海报。在过去的六个小时里,我一直在研究这个问题

问题:

实现以下功能。每个函数都处理以null结尾的C样式字符串。您可以假设传入函数的任何字符数组都将包含以null结尾的数据。将所有函数放在一个文件中,然后创建一个彻底测试函数的main()函数

注意:除了strlen()之外,您不能使用任何c字符串函数

我对第四个函数有问题。 所需的行为是:此函数以字符串s的形式返回可以首先找到子字符串的索引。例如,如果s为“摩天大楼”,子字符串为“ysc”,则函数将返回2。如果子字符串未出现在字符串中,则应返回-1

原型:

int-findSubstring(char*str,char-substring[])

这是我的两个函数定义的开始,我不确定其中一个是否朝着正确的方向发展,我在保持循环迭代的过程中遇到了很多困难,任何帮助都将不胜感激

int findSubstring(char *str, char substring[]){

   int subS = -1, index1 = 0, index2 = 0;
   int length1 = (strlen(str) - 1);
   int length2 = (strlen(substring) - 1);

   if(length1 > length2){
      for(int i = 0; i <= length2; i++){

         for(int j = 0; j <= length1; j++){

            if(*(substring + i) == *(str + j) && *(substring +i) != '\0' ){
               i++;

               if(index1 == 0){
                  index1 = i;
               }
            }

            if( *(substring + i) == '\0'){
               subS = i + 2;
            }
         }
      }
   }

   if (length1 < length2){
      cout << "Invalid, substring exceeds size of string!" << endl;
   }
   return subS;

}



int findSubstring(char *str, char substring[]){
   int index = -1;
   int lengthStr = (strlen(str) - 1);
   int lengthSub = (strlen(substring) - 1);

   if (lengthStr < lengthSub){
      cout << "Invalid input, substring exceeds size of string!" << endl;
   }
   if( lengthSub == 0){
      cout << "";
   }

   if (lengthStr > lengthSub){
      for(int i = 0; i <= lengthSub; i++){
         for(int j = 0; j <= lengthStr; j++){



   }

   return index;
}
int findSubstring(char*str,char substring[]){
int subS=-1,index1=0,index2=0;
int length1=(strlen(str)-1);
int length2=(strlen(子字符串)-1);
如果(长度1>长度2){
对于(int i=0;i
//可以用每个c字符串的大小替换str.size()和subString.size()。
int stringPointerOperation(字符串str、字符串子字符串)
{
int pos=0;
布尔未发现;
对于(int i=0;i
在字符串中查找子字符串时使用了错误的策略。外部
for
循环需要迭代主字符串,而内部
for
循环需要迭代子字符串

假设您正在
“abcdef”
中寻找
“de”
。我发现更容易理解和实施的策略是:

我可以从
“abcdef”
0
开始找到
“de”
吗?不,我找不到。
我能从
“abcdef”
1开始找到
“de”
吗?不,我找不到。
我能从
“abcdef”
2
开始找到
“de”
吗?不,我找不到。
我可以从
“abcdef”
3
开始查找
“de”
吗?可以。返回
3

这是一个适合我的版本

int findSubstring(char *str, char substring[]){

   int i;
   int j;
   int length1 = strlen(str);
   int length2 = strlen(substring);

   if(length1 < length2){
      std::cout << "Invalid, substring exceeds size of string!" << std::endl;
      return -1;
   }

   for(i = 0; i < length1; i++){

      for(j = 0; j < length2; j++){

         // The index to use access the element of str
         // needs to be offset by i.
         if( str[i+j] != substring[j] )
         {
            break;
         }
      }

      if ( j == length2 )
      {
         return i;
      }
   }

   return -1;
}
int findSubstring(char*str,char substring[]){
int i;
int j;
int length1=strlen(str);
int length2=strlen(子字符串);
如果(长度1<长度2){

std::cout And?当您运行它时会发生什么?它是如何失败的,有哪些参数?当您用铅笔和纸处理它时会发生什么?现在,我看到您的代码…很混乱。首先解决一个简单的问题。尝试编写一个函数,测试子字符串是否出现在给定字符串的开头(如果子字符串比字符串长,不要大惊小怪,只需返回
false
)。一旦工作正常,请返回更大的问题。
int findSubstring(char *str, char substring[]){

   int i;
   int j;
   int length1 = strlen(str);
   int length2 = strlen(substring);

   if(length1 < length2){
      std::cout << "Invalid, substring exceeds size of string!" << std::endl;
      return -1;
   }

   for(i = 0; i < length1; i++){

      for(j = 0; j < length2; j++){

         // The index to use access the element of str
         // needs to be offset by i.
         if( str[i+j] != substring[j] )
         {
            break;
         }
      }

      if ( j == length2 )
      {
         return i;
      }
   }

   return -1;
}