如何从字符串中删除括号?

时间:2013-08-07 14:11:14

标签: c

我有一个

char s9[7] = "[abcd]";

如何删除括号[]以便

s9 == "abcd"

我试过了

s9 = s9.Substring(1, s9.Length-2);

在cygwin中抛出错误

a2v2.c:42:13: error: request for member ‘Substring’ in something not a structure or union
a2v2.c:42:29: error: request for member ‘Length’ in something not a structure or union

编辑:

我意识到我的错误,我是c的初学者,无法区分c和C ++代码,问候

5 个答案:

答案 0 :(得分:3)

如果它是严格的C,那么你将需要使用更多基本函数(char []数组与C ++中的字符串类几乎没有共同之处)。要使用的一些功能可能是:

  • strchr:找到角色的位置(例如strchr( s9, '['))。这假设它不是您正在处理的固定格式。如果你知道长度和位置,那么你可以跳过这个并直接使用memmove。
  • memmove:移动数组中剩下的字符。在这种情况下,需要memmove(超过memcpystrncpy),因为目标和目的地重叠。

答案 1 :(得分:3)

删除字符串实际开始和结束的所有检查:

int len = strlen(s9);

for ( i = 0; i < len - 2; ++i )
  s9[i] = s9[i + 1];

s9[len - 2] = '\0';

答案 2 :(得分:3)

memmove( s9, s9 + 1, 4);
s9[4] = 0;

答案 3 :(得分:3)

如果我错了,有人会纠正我,因为我知道的C标准已有几十年了,但据我所知,C并没有为字符串操作提供任何标准支持,事实上并没有甚至正式有一个字符串的概念。 (或对象函数,就此而言。)相反,C使用指针,它更强大,但更危险的是,如果你不了解它们的方法,你可以真正搞砸了。

最重要的是,如果你想成为C程序员就是你学习了C.至少,你需要查找“字符串操作C”并阅读弹出的任何页面。

有很多方法可以做你想要的。我认为这是更快的一个(虽然它修改了你正在看的字符串。如果重要,请选择另一种方式):

// trim off the last character
s9[strlen(s9) - 1] = '\0';
// the char * points to the s9 array.  +1 makes it look at 
// the second element, so then substring is the string you need
char * substring = s9 + 1;

答案 4 :(得分:2)

int len = strlen(s9);
memmove(s9, (s9+1), len-2);  /* can handle overlapping strings */
s9[len-2] = 0;  /* null terminate */