用空字符

时间:2016-01-11 14:31:35

标签: c linux

我需要将“(ASCII值34)char替换为空字符”“。

在输出中,而不是引用我得到一个“?”问号字符。 我试图使用像:

这样的东西
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中的字符串如下:

“你好”

“地方”

“学校”

所有引号 - 我实际上需要删除它们并得到:

您好

地方

6 个答案:

答案 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

答案 1 :(得分: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
}

答案 2 :(得分: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&amp;采用了它。里奇。请使用调试器仔细研究它。

答案 3 :(得分: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多长时间。出于这个原因,我使用字符指针而不是索引。

答案 4 :(得分:0)

没有&#34;空字符&#34;。一个字符串可以是空的,没有字符,但字符是原子元素,不能为空,就像一盒苹果可以是空的,但是人们不能有一个空的苹果&#34; #34;

相反,您需要删除引号并关闭它们占用的空间。更好的是,如果您自己进行复制,请不要复制它们:

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

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

答案 5 :(得分:0)

您可以使用它来删除所有&#39; \&#34;&#39; -characters:

void stripquotes(char *ptr) {
    char *ptr2 = ptr;
    do {
        *ptr2 = *ptr++;
         if (*ptr2 != '\"')
             ptr2++;
    } while (*ptr);
}