[英]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.