2017简短歌词说说:一段C++的关于函数返回指针的代码,有几个问题

来源:百度文库 编辑:高考问答 时间:2024/05/03 05:38:22
#include<iostream>
using namespace std;

char *get_substr(char *sub, char *str);

int main() {
char *substr;

substr = get_substr("three", "one two three four");

cout<<"substring found: "<<substr;

return 0;
}

char *get_substr(char *sub, char *str) {
int t;
char *p, *p2, *start;

//for(t=0;str[t];t++) {
p = &str[t];
start = p;
p2 = sub;
while(*p2 && *p2==*p) {
p++;
p2++;
}

if(!*p2)
return start;
}//

return 0;
}

函数get_substr()在字符串中搜索一个子串.它返回第一个相匹配的子串的指针.如果没有找到匹配的子串,就返回空指针.我不明白的是get_substr是怎样实现这样的操作的呢?//中的代码是什么意思?

条件(*p2 && *p2==*p)中,判断sub是否为空,且判断sub与str中的字符是否相等。如果str中的字符串与sub中的完全相等。则*p2指向sub字符串的最后一个,即\0。在最后的一个判断中,因为*P为0,则!p为1。返回此时的str 的地址,即此时指向的str中的字符。如果,str中的字符串与sub中的不是完全相等,则回到循环处,重新指向。
但是在这个程序中,只有判断,没有中止,所以在找到与sub相同的字符串,后,它输出的是str中与sub相同的第一个字符串及其后的所有字符。