我需要将“(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中的字符串如下:
“你好”
“地方”
“学校”
所有引号 - 我实际上需要删除它们并得到:
您好
地方
学
答案 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);
}