c - 用新字符串替换字符串模式

标签 c string design-patterns replace

我真的需要一些帮助来解决这个问题......

  • char *replace(char *s, char *pat, char *rep)

    返回字符串 s 的副本,但带有 pat 的每个实例替换为 rep .注意 len(pat)可以小于、大于或等于 len(rep) .该函数为结果字符串分配内存,并由调用者释放它。例如,如果我们调用 replace("Fiore X", "X", "sucks") , 返回的是新字符串 Fiore sucks (但请记住,pat 可能比单个字符长,并且可能出现多次)。

我已经设法确定该模式是否出现在原始字符串中,但如果该模式出现不止一次,我就会遇到问题。我还没有涉及用替换文本创建新字符串的部分。我不允许使用 <string.h> 中的任何功能. (我对 C 还是很陌生)

char *replace(char *s, char *pat, char *rep){

    char *a = malloc(300);
    char *pa = s;
    int patLen = 0;
    int i;

    for(i = 0; pat[i] != '\0'; i++)
    {
        patLen++;
    } 
    int ogLen = patLen;
    while(*s != '\0')
    {
        if(*s == *pat)
        {
            s++;
            pat++; 
            patLen--;
            while(*s == *pat)
            {
                s++;
                pat++;
                patLen--;
            }
            if(patLen == 0)
            {
                printf("This is a pattern");
                patLen = ogLen;
            }
        }
        s++;

    }   
    return s;
}

最佳答案

由于您不能使用 string.h 函数,我将编写一些字符串实用函数来计算字符串长度、比较字符串和复制字符串。这将使您的代码更易于理解。我会通过 string s 进行 2 次传递:第一次会计算 pat 的出现次数。然后我可以计算新字符串的大小:length(s) + occurrences * (length(rep) - length(pat)。分配新字符串。现在再次通过 string s,复制到新字符串中,但每当出现 pat已找到,请改为复制 rep。希望这对您有所帮助。

关于c - 用新字符串替换字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623718/

相关文章:

javascript - 停止构造函数

c# - 域建模 - 实现属性或 POCO 的接口(interface)?

c - 如何阻止我的程序读取串行端口缓冲区?

C (linux) - 模拟/跳过 scanf 输入

c# - Rabin Karp字符串匹配算法

Java-Chat-App::分析用户输入

c - VxWorks 5.5 没有用 0xEEEEEEEE 填充堆栈

通过 C 中的 SO 更改内存中的值

php - 不寻常的时间格式 PHP (TZ,H,M,S)

JAVA 使用匹配器/模式查找字符串中括号包围的部分