lintcode 字符串查找 问题

C++语言 码拜 9年前 (2016-04-10) 1132次浏览
【问题描述】对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。假如不存在,则返回 -1。
【样例】 假如 source = “source” 和 target = “target”,返回 -1。
假如 source = “abcdabcdefg” 和 target = “bcd”,返回 1。
以下是本人的代码,请帮本人看以下这段代码哪儿有问题 ( lintcode上报Runtime Errorlintcode 字符串查找 问题):
int strStr(const char *source, const char *target) {
// write your code here
int i , j = 0;
if (source == nullptr || target == nullptr) {
return -1;
}
if ( *target == “\0”)
return i;
while (source[i + j] != “\0” && target[j] != “\0”) {
if (source[i+j] != target[j]) {
i++;
j = 0;
} else {
j++;
}
}
return  target[j] == “\0” ? i + 1: -1;
}
解决方案

20

int i , j = 0;  // i没有初始化

10

还有,你的返回值不符合要求。应该把return里面的i+1改成i

20

#include<stdio.h>
int strStr(const char *source, const char *target) {
	// write your code here
	int i = 0, j = 0;
	if (source == nullptr || target == nullptr) {
		return -1;
	}
	if ( *target == "\0")
		return i;
	while (source[i + j] != "\0" && target[j] != "\0") {
		if (source[i+j] != target[j]) {
			i++;
			j = 0;
		} else {
			j++;
		}
	}
	return  target[j] == "\0" ? i : -1;
}
void main()
{
	char *a = "abcdabcdefg";
	char *b = "bcd";
	printf("%d\n", strStr(a, b));
}

单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明lintcode 字符串查找 问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)