给定2个字符串,编写一个函数,如果字符串A是字符串B的子字符串,则返回与字符串A匹配的字符串B的位置。否则返回-1。 例如:
strA = "ello"
strB = "Hello_World"
Your function should return 1.
strA = "blah"
strB = "blha"
Your function should return -1.
答案 0 :(得分:3)
这是家庭作业吗?无论如何,看看string.h documentation你应该找到你需要的东西而不会有太多麻烦。您需要在其中一个函数上编写一个非常薄的包装器。或者,当然,你可以自己写出来。
编辑:嗯,其他人给了答案,所以这是我的尝试。#include <string.h>
ssize_t str_index(const char *strA, const char *strB)
{
const char *result;
return (result = strstr(strB, strA)) ? (result - strB) : -1;
}
唯一的技巧是参数顺序与strstr相反,你返回的是ssize_t而不是char *,因此失败代码为-1。
答案 1 :(得分:2)
蛮力版本:
int strpos(char* a, char* b) {
int n1, n2, i, j;
n1 = strlen(a);
n2 = strlen(b);
for (i = 0; i < n1-n2; i++) {
for (j = 0; j < n2; j++) {
if (a[i+j] != b[j]) break;
else if (j+1 == n2) return i;
}
}
return -1;
}
更有效的算法:Wikipedia: String searching
答案 2 :(得分:2)
#include <string.h>
int search(char* a, char* b) {
char* pos;
pos = strstr(b, a);
if(pos == 0) return -1;
return (int)(pos-b);
}
答案 3 :(得分:0)
这听起来几乎就像一个家庭作业问题。在奇怪的情况下,它不是一个家庭作业问题,C库函数strstr返回指向另一个字符串中第一次出现的字符串的指针(如果不存在,则返回null)。从那里,使用指针算法确定索引是微不足道的。
答案 4 :(得分:0)
尝试学习strstr。它在string.h中可用 从不是编码标准库中已有内容的理由。 除非当然,它是一个家庭作业问题:)