算法漂流记-shell脚本的字符串替换

问题描述

linux shell脚本的字符串替换问题,当遇到 X X X 时 , 则 代 表 参 数 字 符 , 需 要 将 {XXX}时,则代表参数字符,需要将 XXX{XXX}替换成XXX变量对应的字符串值。
首先输入行数,接着输入每行的数据,输出最后变量的值

输入

4
xxx=lyf/ t t t / t e s t t t t = w w w y y y = s e e y o u a a = / a a a / {ttt}/test ttt=www yyy=seeyou aa=/aaa/ ttt/testttt=wwwyyy=seeyouaa=/aaa/{xxx}/bbb/${yyy}/ccc

输出

/aaa/lyf/www/test/bbb/seeyou/ccc*/

#include<stdio.h>
#include<string.h>
#include<memory.h>
#include<stdlib.h>

typedef struct _SLNode
{
	int i$Count;
	char cArr[200];
	char cType[200];
	char cValue[200];
	struct _SLNode *Next;
}SLNode;

int main()
{
	int iNum;
	while (scanf("%d", &iNum) != EOF)
	{
		SLNode* SLHead = (SLNode*)malloc(sizeof(SLNode));
		SLHead->Next = NULL;
		for (int i = 0; i < iNum; i++)
		{
			SLNode* CurNode = (SLNode*)malloc(sizeof(SLNode));
			memset(CurNode, 0, sizeof(SLNode));
			scanf("%s", CurNode->cArr);
			char* pcChar = strchr(CurNode->cArr, '=');
			int j = strlen(pcChar) - 1;
			strncpy(CurNode->cValue, pcChar + 1, strlen(pcChar)-1);
			strncpy(CurNode->cType, CurNode->cArr, strlen(CurNode->cArr) - strlen(pcChar));
			
			CurNode->Next = SLHead->Next;
			SLHead->Next = CurNode;
			
		}
		SLNode* SLLastNode = SLHead->Next;
		while (strchr(SLLastNode->cValue, '{'))
		{
			char *pcStart;
			char *pcEnd;
			int iTypeLen;
			pcStart = strchr(SLLastNode->cValue, '{');
			pcEnd = strchr(SLLastNode->cValue, '}');
			iTypeLen = strlen(pcStart) - strlen(pcEnd) - 1;
			SLNode* SLFindNode = SLLastNode->Next;
			while (SLFindNode)
			{
				if (memcmp(pcStart + 1, SLFindNode->cType, iTypeLen) == 0)
				{
					char a[200] = { '\0' };
					memcpy(a, SLLastNode->cValue, (strlen(SLLastNode->cValue) - strlen(pcStart) - 1));
					memcpy(a + strlen(a), SLFindNode->cValue, strlen(SLFindNode->cValue));
					memcpy(a + strlen(a), pcEnd + 1, strlen(pcEnd) - 1);
					memset(SLLastNode->cValue, 0, strlen(SLLastNode->cValue));
					memcpy(SLLastNode->cValue, a, strlen(a));
				}
				SLFindNode = SLFindNode->Next;
			}
		}
		printf("%s", SLLastNode->cValue);
		
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值