user-0 提问: 指针作为返回值问题

回复:
user: user-0
content: 引用 9 楼 Lost_guangtou 的回复：萌新看了楼主的问题记录了一下自己的思路，大神绕路。 其中shuzu()函数是我自己想到的解决方法，match()是参考了楼主的思路，其实就是把char*当作char[]然后读取固定位置并显示出来。 #include "stdafx.h" #include <iostream> #include <string> #include<stdlib.h>  using namespace std; //把char*当作char[]数组来看 /*char *shuzu(char *str,char s1,char s2) { 	char *var = str; 	char *result = new char [50]; 	int len = strlen(var); 	int num1=0, num2=0; 	//char str_var[10]; 	for (int i = 0; i<len; i++) { 		if (s1 == var[i]) { 			num1 = i; 			break; 		} 	} 	for (int j = num1+1; j<len; j++) { 		if (s2 == var[j]) { 			num2 = j; 			break; 		} 	} 	for (int i = 0;i < num2;i++) { 		result[i] = var[num1++]; 		result[i+1] = '\0'; 	} 	return result; }; */  char *match(char *s, char c1, char c2) { 	char *c = s; 	char *t = new char[50]; 	char *result = new char[50]; 	int i = 0, j = 0,k=0,h=0; 	for (;*c != '\0';c++) { 		if (*c == c1) 		{ 			break; 		} 		i++; 	} 	//cout << i << endl; 	c = c++; 	for (;*c != '\0';c++) { 		if (*c == c2) 		{ 			break; 		} 		j++;	 	} 	//cout << j << endl; 	k = i + 1 + j; 	h = i;//记录i的位置后面要用 	//cout << k << endl; 	//cout << s << endl; 	for (int q = 0;q <= k-h;q++) { 		result[q] = s[i++]; 		result[q + 1] = '\0'; 	} 	//cout << result << endl; 	return result; };  int main() { 	char str[10]; 	char s1, s2; 	cout << "请输入一个字符串：" << endl; 	cin >> str;//获取用户输入字符串 	//cout << strlen(str) << endl; 	//cout << str; 	cout << "请选择第一个字符：" << endl; 	cin >> s1; 	//cout << s1; 	cout << "请选择第二个字符：" << endl; 	cin >> s2; 	//cout << s2; 	//char *t = shuzu(str, s1, s2); 	char *t = match(str, s1, s2); 	for (int j = 0; j<(strlen(t)); j++) { 		cout << t[j]; 	} 	system("pause");     return 0; }谢谢大佬，今天重新看了下帖子，我现在在学C，但是还是认真看了你们的代码，学习学习思路，感谢感谢

user: user-1
content: 刚发现没有添加图片

user: user-1
content: 补一下我的截图

user: user-1
content: 萌新看了楼主的问题记录了一下自己的思路，大神绕路。 其中shuzu()函数是我自己想到的解决方法，match()是参考了楼主的思路，其实就是把char*当作char[]然后读取固定位置并显示出来。 #include "stdafx.h" #include <iostream> #include <string> #include<stdlib.h>  using namespace std; //把char*当作char[]数组来看 /*char *shuzu(char *str,char s1,char s2) { 	char *var = str; 	char *result = new char [50]; 	int len = strlen(var); 	int num1=0, num2=0; 	//char str_var[10]; 	for (int i = 0; i<len; i++) { 		if (s1 == var[i]) { 			num1 = i; 			break; 		} 	} 	for (int j = num1+1; j<len; j++) { 		if (s2 == var[j]) { 			num2 = j; 			break; 		} 	} 	for (int i = 0;i < num2;i++) { 		result[i] = var[num1++]; 		result[i+1] = '\0'; 	} 	return result; }; */  char *match(char *s, char c1, char c2) { 	char *c = s; 	char *t = new char[50]; 	char *result = new char[50]; 	int i = 0, j = 0,k=0,h=0; 	for (;*c != '\0';c++) { 		if (*c == c1) 		{ 			break; 		} 		i++; 	} 	//cout << i << endl; 	c = c++; 	for (;*c != '\0';c++) { 		if (*c == c2) 		{ 			break; 		} 		j++;	 	} 	//cout << j << endl; 	k = i + 1 + j; 	h = i;//记录i的位置后面要用 	//cout << k << endl; 	//cout << s << endl; 	for (int q = 0;q <= k-h;q++) { 		result[q] = s[i++]; 		result[q + 1] = '\0'; 	} 	//cout << result << endl; 	return result; };  int main() { 	char str[10]; 	char s1, s2; 	cout << "请输入一个字符串：" << endl; 	cin >> str;//获取用户输入字符串 	//cout << strlen(str) << endl; 	//cout << str; 	cout << "请选择第一个字符：" << endl; 	cin >> s1; 	//cout << s1; 	cout << "请选择第二个字符：" << endl; 	cin >> s2; 	//cout << s2; 	//char *t = shuzu(str, s1, s2); 	char *t = match(str, s1, s2); 	for (int j = 0; j<(strlen(t)); j++) { 		cout << t[j]; 	} 	system("pause");     return 0; }

user: user-2
content: 第一个scanf去掉'\n'；然后在第二个scanf之前加一句getchar();即加在两个scanf中间。

user: user-0
content: 谢谢赐教，你的代码我会好好琢磨琢磨的

user: user-0
content: 引用 5 楼 自信男孩 的回复：[quote=引用 2 楼 weixin_45077334 的回复:] 还是一样的结果呢……，想请问一下我自定义的*match函数正确吗 贴出源码吧，不要用图片了[/quote]不好意思啊，新人，以后不用图片谢谢了

user: user-0
content: 引用 3 楼 李文强liwq 的回复：while之前s++，往后挪一位，要不然还是第一个匹配谢谢大佬啊，才发现漏洞在此

user: user-2
content: 引用 2 楼 weixin_45077334 的回复:还是一样的结果呢……，想请问一下我自定义的*match函数正确吗 贴出源码吧，不要用图片了

user: user-3
content: 首先只从你自己写的match函数来讲，你应该在第二个循环while前加上s++;这样你前后两个循环才不会找到同一个'e'; 其次从编写函数的最基本原则上来讲，你要确定好你写的每个函数的功能是什么，然后在实现过程中要牢记它，否则你会给自己或别人挖坑。match功能是在s中查找出先后匹配c1和c2的字符串，那么你就不能修改s的值！！！起始你应该函数返回先后匹配c1和c2的字符序号；  可以参考下面的方法 bool match(const char* s, char c1, char c2, int* nIdx1, int* nIdx2) {     bool bMatched = false;     if (NULL == s)    {         return bMatched;    }      nIdx1 = -1;      nIdx2 = -1;     int nLen = strlen(s);     for (int i = 0; i < nLen; i++)     {         if (c1 == s[i])         {              *nIdx1 = i;         }         if (nIdx1 != -1 && c2 == s[i])         {             *nIdx2 = i;             bMatched = true;             break;         }     }      return bMatched;     }  main函数可以根据函数返回true、false来判断是否成功匹配，然后在输出:strmathed. if (bMatched && -1 != nIdx1 && -1 != nIdx2 && nIdx1 < nLen && nIdx2 < nLen) {     strncpy(strmathed, s[nIdx1], nIdx2 - nIdx1 + 1);     printf("%s", strmathed); } else {     printf("无匹配字符串."); }

user: user-4
content: while之前s++，往后挪一位，要不然还是第一个匹配

user: user-0
content: 还是一样的结果呢……，想请问一下我自定义的*match函数正确吗