删除char *中的第一个字符

时间:2013-06-20 13:14:38

标签: c

我有一个char *,其中包含此数据“asd:asdsa”

我想删除':'字符之前的内容。如何才能做到这一点?我看到了丑陋的建议需要我移动指针,但我不想这样做?

我可以知道一些建议吗?

8 个答案:

答案 0 :(得分:8)

在C中,你可以这样做:

char *newString = originalString + 4;

现在,如果您不想这样做,请告诉我们原因。告诉我们问题!

此外,如果您不知道它是4还是其他东西(仅在运行时可以知道),那么使用循环找出':'的索引并在其中使用它4的地方。这是一项简单的任务。自己试试吧。祝好运。 : - )


我保留这部分仅仅是为了学习目的,因为这个问题在我编写时最初被标记为C ++,而且我认为这有助于那些偶尔使用C ++工作的C程序员。

在C ++中,std::string简化了你用字符串做的很多事情。

std::string s = "asd:asdsa";  //#include <string>
s = s.substr(s.find(':') + 1);

在此代码中,substr()会在:之后返回字符串,这意味着其值为"asdsa"

请参阅Online Demo.

答案 1 :(得分:2)

我会说strchrmemmove的混合应该这样做。

char *res = strchr(str, ':');
if (res)
  memmove(str, res + 1, strlen(res + 1) + 1);

答案 2 :(得分:1)

如果没有“丑陋”的解决方案,你无法删除它。

但是你可以直接使用你的字符串的第三种情况的地址。

printf("%s\n", &str[3]);

例如

答案 3 :(得分:1)

您可以尝试使用strtok()

char mystr[] = "asd:asdasd";
char *split;
int second = 0;

split = strtok(mystr, ":");

  while (second < 2 && split != NULL)
  {
    split = strtok (NULL, ":");
    second++;
  }
puts(split);

答案 4 :(得分:1)

你应该像Nawaz先前所说的那样使用std::string,但是使用原始指针你只需使用my_data

char* original_data = "asd:asdasd";
char* my_data = original_data + 4; // points to: "asdasd"

答案 5 :(得分:1)

使用C函数:

#include <string.h>

char *p = strchr(s, '.');

if (p != NULL)
{
    memmove(s, p + 1, strlen(p));
}

答案 6 :(得分:0)

由于你使用的是char *,你必须使用指针 但如果您使用的是c ++,为什么不使用std::string

无论如何你可以使用strstr作为char *但你会操纵指针

答案 7 :(得分:0)

如果数据指向只读位置,则无法修改。可以使用std::string轻松完成。

std::string str("asd:asdsa");
size_t loc = str.find(':') + 1;
str.erase (str.begin(), str.begin() + loc);