cincoutreturn 2019-11-09 23:22 采纳率: 0%
浏览 332

我的代码哪里错了-_-||为什么总有一组数据输出错误?

编制具有如下原型的函数findLast:

   char*findLast(char*sourceStr,char*subStr);

findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。
而后编制主函数,输入两个字符串,将它们用作实参来调用这两个函数,如果返回NULL输出-1,否则输出子字符串出现时头字符在原字符串的下标,每个结果占一行。
要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。

【输入形式】输入源串sourceStr,子字符串subStr。
【输出形式】子字符串subStr最后一次在源串sourceStr中出现的位置
【样例输入】
        welcometochinauniversityofminingandtechnology
        in
【样例输出】29
#include<iostream>
using namespace std;

char*findLast(char*,char*);
int main()
{   
    char*a;
    char sourcestr[100];
    char substr[10];
    cin.getline(sourcestr,100);
    cin.getline(substr,10);
    a=findLast(sourcestr,substr);
    if(a==NULL)
    cout<<-1;
    else
    cout<<a-sourcestr;
    return 0;
}
char*findLast(char*sourcestr,char*substr)
{
  int i=0,j=0,len1=0,len2=0,k=0,x=0;
  char*p1=sourcestr;
  char*p2=substr;


  while(sourcestr[i]!='\0')
  {
   len1++;
   i++;
  }


  i=0;
  while(substr[i]!='\0')
  {
   len2++;
   i++;
  }
  if(len1<len2)
  return NULL;
  else
 {
   for(i=0;i<len1;i++)
   {if(*(p1+i)==*(p2+j))
       {j++;
       x=j;
       }

   else
   {
     j=0;
     if(*p2==*(p1+i-x+1))
     j++;
     i=i-x+1;
   }
   if(j==len2)
   {
    k=i;
    j=0;
   }
  }
 }
 if(k)
 {for(i=0;i<k-len2+1;i++)
  p1++;
  return p1;
 }
 else 
 return NULL;
}

共有测试数据:5
平均占用内存:3.087K 平均CPU时间:0.80000S 平均墙钟时间:0.80854S

测试数据
评判结果
测试数据1
运行时间过长
测试数据2
输出错误
测试数据3
完全正确
测试数据4
运行时间过长
测试数据5
完全正确

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-11-10 10:03
    关注

    代码贴得有些乱,少了很多内容,请用代码片格式化下,好帮你调试
    目测
    char sourcestr[100];
    char substr[10];
    这两个都很小,确认它们最多只有100个和10个字符么

    评论

报告相同问题?

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100