首先,我是C的新手。所以请耐心等待。
我指的是关于指针的教程,它要求我编写一个函数来查找子字符串(如果找到,该函数应该返回原始字符串中子字符串的位置)。
我写了代码并且它完美地工作,唯一的问题是它太冗长而我想知道,如果有一种方法我可以使它不那么复杂。
以下是代码 -
*s
- 包含字符串的基地址*t
- 包含子字符串的基址num
- 包含子字符串中的字符数(使用strlen计算)char *search(char *s, char *t, int num)
{
int i = 0, flag = 0;
/* increment str1 until first matching character (of substring) is encountered */
while((*s != *t) && (*s != '\0'))
{
s++;
}
if(*s == *t)
{
/* comparing the str and substr, and incrementing flag.. if flag is incremented num times, the strings match */
while((*(s+i) == *(t+i)) && (i<num))
{
flag++;
i++;
}
}
if(flag == num)
return s;
else
/* recursive function - str is incremented by 1, to start new comparison */
return search((s+1), t, num);
}
任何帮助都会被贬低。提前谢谢你。
答案 0 :(得分:2)
我认为你不需要特殊情况下找到第一个字符:
char * search(char *s, char *t, int num)
{
while (*s) {
int i;
for (i = 0; i < num; i++) {
if (!s[i]) {
return NULL;
}
if (s[i] != t[i]) {
break;
}
}
if (i == num) {
return s;
}
s++;
}
return NULL;
}
答案 1 :(得分:0)
我认为它已经做得很好,只是一些小事:
char * search(char *s, char *t, int num)
{
int i = 0, flag = 0;
/* increment str1 until first matching character (of substring) is encountered */
/* It can be written on one line: */
while((*s != *t) && (*s != '\0')) s++;
/* comparing the str and substr, and incrementing flag.. if flag is incremented num times, the strings match */
/* The if is not needed, a for loop is shorter: */
for(; (*(s+i) == *(t+i)) && (i<num); flag++, i++);
if(flag == num)
return s;
else
/* recursive function - str is incremented by 1, to start new comparison */
return search((s+1), t, num);
}
答案 2 :(得分:-2)
您可以使用strstr()函数
return strstr(s, t);
http://www.tutorialspoint.com/c_standard_library/c_function_strstr.htm