我有一个char *,其中包含此数据“asd:asdsa”
我想删除':'字符之前的内容。如何才能做到这一点?我看到了丑陋的建议需要我移动指针,但我不想这样做?
我可以知道一些建议吗?
答案 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)
我会说strchr
和memmove
的混合应该这样做。
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);