C Programming replacement string

const char* findStr(const char* src, const char* sub)
{
	const char* bp;
	const char* sp;

	if (src == NULL || sub == NULL) return NULL;

	while (*src != '\0') //遍历src字符串
	{
		bp = src;  //用于src的遍历
		sp = sub;  //用于sub的遍历
		do
		{
			if (!*sp)		   //如果到了sub字符串结束符位置
				return src;    //表示找到了sub字符串,退出
		} while (*bp++ == *sp++);
		src += 1;
	}

	return NULL;
}

//将str字符串中的sub1字符串替换成sub2
char *replace(const char* str, const char* sub1, const char* sub2, char* output)
{
	char* pOutput = NULL;
	const char* pStr = NULL;
	int lenSub1 = strlen(sub1);   //子串sub1的长度
	int lenSub2 = strlen(sub2);   //子串sub2的长度

	pOutput = output;
	pStr = str;  //用于寻找子串
	while (*pStr != 0)
	{
		pStr = findStr(pStr, sub1); //在str中寻找sub1子串
		if (NULL != pStr)  //找到sub1子串
		{
			memcpy(pOutput, str, pStr - str); //复制str的前一部分output
			pOutput += pStr - str;
			memcpy(pOutput, sub2, lenSub2); //复制sub2子串到output
			pOutput += lenSub2;
			pStr += lenSub1;
			str = pStr;
		}
		else  //找不到子串sub1子串
		{
			break;
		}
	}
	*pOutput = '\0';

	if (*str != '\0')
	{
		strcpy(pOutput, str);
	}

	return output;
}


int main()
{
	const char str[] = "abcdefgbc";
	const char str1[] = "bc";
	const char str2[] = "123";

	char buffer[100];

	cout << replace(str, str1, str2, buffer) << endl;

	system("pause");
	return 0;
}
Published 59 original articles · won praise 1 · views 3889

Guess you like

Origin blog.csdn.net/lpl312905509/article/details/104088730