【问题描述】对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。假如不存在,则返回 -1。
【样例】 假如 source = “source” 和 target = “target”,返回 -1。
假如 source = “abcdabcdefg” 和 target = “bcd”,返回 1。
以下是本人的代码,请帮本人看以下这段代码哪儿有问题 ( lintcode上报Runtime Error):
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;
}
【样例】 假如 source = “source” 和 target = “target”,返回 -1。
假如 source = “abcdabcdefg” 和 target = “bcd”,返回 1。
以下是本人的代码,请帮本人看以下这段代码哪儿有问题 ( lintcode上报Runtime Error):
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执行停在该断点处。)是程序员必须掌握的技能之一。