从向量中获取资源(字符串),然后对字符串进行一些操作。其中一个字符串(资源)具有以下值
"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)
}
在此代码中,所有矢量元素都将进行冗长的过程,但这对性能将是非常不利的。
答案 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);
}