-3

我有一个

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++ 代码,问候

4

5 回答 5

3

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

  • strchr:查找字符的位置(例如,strchr( s9, '['))。这假设它不是您正在处理的固定格式。如果你知道长度和位置,那么你可以跳过这个,直接使用 memmove。
  • memmove: 在数组中左移字符。在这种情况下memmove将需要(超过memcpystrncpy),因为目标和目的地重叠。
于 2013-08-07T14:15:49.760 回答
3

跳过任何检查字符串实际上以这些字符开头和结尾的内容:

int len = strlen(s9);

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

s9[len - 2] = '\0';
于 2013-08-07T14:17:37.427 回答
3
memmove( s9, s9 + 1, 4);
s9[4] = 0;
于 2013-08-07T14:19:12.553 回答
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;
于 2013-08-07T14:21:18.607 回答
2
int len = strlen(s9);
memmove(s9, (s9+1), len-2);  /* can handle overlapping strings */
s9[len-2] = 0;  /* null terminate */
于 2013-08-07T14:17:02.690 回答