字符串 替换 华为 java_2014华为机试-字符串替换

题目要求:输入一个字符串,然后在输入一个整数,就是替换字符串的次数,然后依次输入须要替换的字符串……

比如:

输入:asdfghjasdfghj

3

as->bnm

df->qwe

gh->yui

输出:bnmqweyuijbnmqweyuij

意思就是,将输入的字符串中,as替换成bnm,df替换成qwe,gh替换成yui,总共替换三次,注意次数是不限定的,能够是随意整数等。

假设输入的次数是2,举例说明:

输入:asdfgasdfg

2

as->bn

df->yuio

输出:bnyuiogbnyuiog

做完这道题,感觉自己把自己坑了,选择了用C语言,事实上学过Java的同学随便都能够用几行代码实现,耗掉自己非常多时间。

程序实现例如以下:

/*

** Replace String

*/

#include

#include

#define SUCCESS0

#define FAILED-1

#define MAXLINE48

#define NOTFOUND-1

int GetNumber(void)

{

char temp;

int count;

count = 0;

temp = getchar();

while(temp >= '0' && temp <= '9')

{

count = count * 10 + (temp - 0x30);

temp = getchar();

}

return count;

}

void GetString(char buff[])

{

char temp;

int i;

i = 0;

temp = getchar();

while (temp != '\n')

{

buff[i++] = temp;

temp = getchar();

}

buff[i] = '\0';

}

int FindString(int begin, char str1[], char str2[])

{

int i, j;

int MAXSIZE = strlen(str2);

i = begin;

while (str1[i] != '\0')

{

for (j = 0; j < MAXSIZE; j++)

{

if (str1[i++] == str2[j])

continue;

else break;

}

if (j == MAXSIZE)

return (i - j);

}

return NOTFOUND;

}

int myStrcpy(char dest[], char src[])

{

int i = 0;

while (src[i] != '\0')

{

dest[i] = src[i];

i++;

}

dest[i] = '\0';

return SUCCESS;

}

void StringSplite(char *pBuff, char target[], char repStr[])

{

int i = 0, j = 0;

while(*(pBuff + i) != '-')

{

target[i] = *(pBuff + i);

i++;

}

target[i] = '\0';

while (*(pBuff + i) == '-' || *(pBuff + i) == '>')

i++;

while (*(pBuff + i) != '\0')

{

repStr[j++] = *(pBuff + i);

i++;

}

repStr[j] = '\0';

}

void ReplaceString(char dest[], char src[], char repStr[])

{

char temp[MAXLINE] = {'\0'};

int Swidth, Rwidth;

int begin = 0, iPos = 0;

int i = 0;

Swidth = strlen(src);

Rwidth = strlen(repStr);

while (dest[i] != '\0')

{

iPos = FindString(begin, dest, src);

if (iPos != NOTFOUND)

{

myStrcpy(temp, dest + iPos + Swidth);

myStrcpy(dest + iPos, repStr);

myStrcpy(dest + iPos + Rwidth, temp);

memset(temp, 0, MAXLINE);

begin = iPos + Rwidth;

i = begin;

}

else

break;

}

}

int main(void)

{

char **pChar = NULL;

char inData[48] = {'\0'};

char target[10] = {'\0'};

char repStr[10] = {'\0'};

int i, j, sum;

GetString(inData);

fflush(stdin);

sum = GetNumber();

pChar = (char **) malloc(sum * sizeof(char *));

if (pChar == NULL)

{

printf("Malloc memory for pChar has faild!\n");

return 0;

}

for (i =0; i < sum; i++)

{

*(pChar + i) = (char *) malloc(MAXLINE * sizeof(char));

if (*(pChar + i) == NULL)

{

printf("Malloc memory for *(pChar + %d) has faild!\n", i);

return 0;

}

}

for (i = 0; i < sum; i++)

{

fflush(stdin);

GetString(*(pChar + i));

}

for (i = 0; i < sum; i++)

{

memset(target, 0, sizeof(target));

memset(repStr, 0, sizeof(repStr));

StringSplite(*(pChar + i), target, repStr);

ReplaceString(inData, target, repStr);

}

printf("%s\n", inData);

for (i = 0; i < sum; i++)

free(*(pChar + i));

free(pChar);

return 0;

}

执行结果例如以下:

890e0ad84b6d91108c3dd35e3c45f4fc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值