2016-01-11 2 views
-1

Мне нужно заменить символ" (ASCII value 34) пустым символом "".заменить "" "пустым символом

В выводе вместо цитаты я получаю "?" знак вопроса знак. Я пытался использовать такие вещи, как:

mystring[itit] = ""; 

mystring[itit] = ''; 

mystring[itit] = "\O"; 

Мой код:

strcpy(mystring ,op->data.value.str ); 
      for(itit=0;itit<10;itit++) 
      { 
      if(mystring[itit] == 34) 
      { 
       mystring[itit] = NULL; 
      } 


      } 
      printf("%s\n",mystring); 

Любые идеи, как это исправить?

Для уточнения: строки в MyString, как:

"привет"

"место"

"школа"

все с кавычками - я на самом деле нужно, чтобы удалить их и получить:

привет

место

школа

+0

Почему вы думаете, используя '\ 0' в строке C до конца в порядке?' \ 0' - это Терминатор в C. Он сигнализирует конец строки. – Magisch

+1

Что вы действительно хотите сделать? Вы хотите удалить символ цитаты из string, а не заменить его чем-то? – Bathsheba

+0

Да, на самом деле его нужно удалить. –

ответ

3

Что вам нужно сделать, это удалить символ, а не заменить его, так как вы не заменяете его с чем-нибудь. Чтобы сделать это, когда вы обнаружите, что персонаж задан вопросом, вам нужно переместить оставшиеся символы.

int i,j; 

strcpy(mystring, "aa\"bb\"cc"); 
for(i=0,j=0;i<10;i++) 
{ 
    if(mystring[i] != '"') 
    { 
     mystring[j] = mystring[i]; 
     j++; 
    } 
} 
mystring[j] = '\0'; 
printf("mystring=%s\n",mystring); 

Результат:

mystring=aabbcc 
2
int removeChar(char *str, char c) { 

    int i, j; 

    for(i = 0, j = 0 ; str[i] ; i++){ 
     if(str[i] == c) continue;  // skip c do not copy it 
     str[j] = str[i];    // shift characters left 
     j++; 
    } 
    str[j]=0; // terminate the string 
    return j; // return the actual size 
} 
+0

Наверное яснее, чем мое решение для новичка, поскольку оно не так зависит от указателя «арифметика». Плюс один. – Bathsheba

+0

@ Батшеба, спасибо – milevyo

0

В C, строки просто массивы символов с NUL (0) в конце. (Они не могут содержать NUL.) Как и в любом массиве, вы не можете просто «удалить» элемент. Вам нужно сдвинуть все следующие элементы на одну позицию, в результате чего в конце будет ненужный элемент. С помощью строк этот дополнительный элемент не является большой проблемой, потому что NUL по-прежнему определяет, где заканчивается строка.

В этом случае сначала вы копируете строку, чтобы вы могли ее скопировать без символов, которые вы хотите удалить. Если вы не знаете, сколько таких символов есть, вам нужно будет выделили достаточно мест в новой строке для всей строки, которую вы хотите скопировать:

/* Before this, you must ensure that mystring has enough space */ 
{ 
    char* out = mystring; 
    const char* in = op->data.value.str; 
    do { 
    if (*in != '"') *out++ = *in; 
    } while (*in++); 
} 

Примечания: Я использую тот факт, что строки NUL концевые чтобы закончить цикл, что избавляет меня от необходимости заранее знать, как долго op->data.value.str. По этой причине я использую символы указатели, а не индексы.

2

Чтобы удалить символ из строки, вы можете сделать это:

void remove(char* str, char rm) 
{ 
    char *src, *dst; 
    for (src = dst = str; *src != '\0'; ++src) { 
     *dst = *src; 
     if (*dst != rm) ++dst; 
    } 
    *dst = '\0'; /*insert terminator at the new place*/ 
} 

и коллировать с rm равным 34.

Этот алгоритм хорошо известен; Я принял его от Kernighan & Ritchie. Изучите это внимательно с вашим отладчиком.

0

Нет «пустого символа». Строка может быть пустой, не имея символов, но символ является атомарным элементом и не может быть пустым, например, ящик яблок может быть пустым, но нельзя иметь «пустое яблоко».

Вместо этого вам нужно удалить кавычки и закрыть место, которое они заняли. А еще лучше, если вы копирующие себя, просто не копировать их:

char *psrc = op->data.value.str; 
char *pdest = mystring; 

while (*psrc != '\0') 
{ 
    if (*psrc != '\"') 
    { 
     *pdest = *psrc; 
     ++pdest; 
    } 
    ++psrc; 
} 
*pdest = '\0'; 
0

Вы можете использовать это, чтобы лишить все «\"»- символы:

void stripquotes(char *ptr) { 
    char *ptr2 = ptr; 
    do { 
     *ptr2 = *ptr++; 
     if (*ptr2 != '\"') 
      ptr2++; 
    } while (*ptr); 
} 
Смежные вопросы