繁体   English   中英

用C字符串中的转义字符双引号替换双引号

[英]Replacing doubles quotes with escape character double quotes in a C string

从向量中获取资源(字符串),然后在字符串上完成一些操作。 其中,其中一个字符串(资源)具有以下值:

"bundle 20B / / <a href="http://ezproxy.rit.edu/login?url=http://firstsearch.oclc.org/fsip?dbname=CWI&done=refer 1234567890123456789012345678901234567890123456789012345678901234567890123456  "

但是,由于此字符串中有一个 (") 双引号字符(在它之前没有 \\;它被视为字符串的结尾,因此在进一步阶段会导致错误。我想编写一个代码,其中,如果在从向量接收到的值中检测到双引号,应将其替换为 (\\"),以便不会发生此错误,并且该过程应针对该字符串中出现的所有双引号字符进行。

我觉得我的解决方案不是那么好。 请建议对此代码进行一些更改以获得更好和优化的解决方案。

for(i = 0; i < vector_getCount(resNames); i++)
{
    char *resource = vector_elementAt(resNames, i);
    int size = 0;
    char str[100];
    int i = 0;
    while(resource[size] != '\0')
    {
        if(resource[size] == '\"')
        {
            str[i] = '\\';
            str[i+1] = '\"';
            i = i+2;
        }
        else
        {
               str[i++] = resource[size];
        }
        size++;
    }
    vector_setElementAt(resNames, i, str)
}

在这段代码中,这个漫长的过程将对所有向量元素进行。 但这对性能非常不利。 有更好的解决方案吗?

我试图编写一个简单的函数,使指定的字符进行转义。 你可以玩弄它。

#include <stdio.h>
#include <string.h>
#include <assert.h>

void myEscaper(char const * str_in,
               char * str_out,
               size_t str_out_size,
               char escape_char) {

    size_t length_str = strlen(str_in);
    assert(length_str < str_out_size);
    size_t j = 0;
    for (size_t i = 0; i < length_str; ++i) {
        if (str_in[i] == escape_char) {
            str_out[j] = '\\';
            str_out[++j] = str_in[i];
        }
        else {
            str_out[j] = str_in[i];
        }
        ++j;
    }
    str_out[j] = 0;
}

int main() {
    char const * in = "acdavca";
    char out[100] = {0};
    myEscaper(in, out, sizeof(out), 'a');

    // You can call the below one
    //myEscaper(in, out, sizeof(out), '\"');
    puts(out);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM