问题描述
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;
}