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

时间:2019-09-15 08:43:35

标签: c

从向量中获取资源(字符串),然后对字符串进行一些操作。其中一个字符串(资源)具有以下值

"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)
}

在此代码中,所有矢量元素都将进行冗长的过程,但这对性能将是非常不利的。

1 个答案:

答案 0 :(得分:0)

我试图编写简单的函数使指定字符转义。你可以用它来玩。

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

void myEscaper( char const * str_in,
                char * str_out,
                size_t str_out_size,
                char escapce_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] == escapce_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);
}