【发布时间】:2021-06-30 21:39:11
【问题描述】:
我想输入一个字符串并删除第一个“空格”之前的所有内容。
这是一个例子:
之前
Hello world
之后
world
【问题讨论】:
-
到目前为止您尝试过什么?显示您的代码!你认为我们会为你写吗?提示:使用
strchr查找空间,如果找到则使用strcpy
标签: c
我想输入一个字符串并删除第一个“空格”之前的所有内容。
这是一个例子:
之前
Hello world
之后
world
【问题讨论】:
strchr查找空间,如果找到则使用strcpy
标签: c
此代码应该适合您。它利用了str 是指向字符串第一个字符的指针这一事实。
char *str = "Hello world";
/*
* Uncomment if `str` could be `NULL`:
*
* if (str == NULL) {
* fprintf(stderr, "Error: invalid string\n");
* exit(EXIT_FAILURE);
* }
*/
while (*str != ' ' && *str != '\0') {
++str;
}
if (*str == ' ')
++str;
如果您对指针不是很熟悉,这是一种类似的方法,可能更容易理解。
char *str = "Hello world";
/*
* Uncomment if `str` could be `NULL`:
*
* if (str == NULL) {
* fprintf(stderr, "Error: invalid string\n");
* exit(EXIT_FAILURE);
* }
*/
int i = 0;
while (str[i] != ' ' && str[i] != '\0') {
++i;
}
if (str[0] == ' ')
str = &str[i + 1];
【讨论】:
要涵盖极端情况,您需要进行一些检查。如果传递的指针为 NULL 或在字符串中找不到字符,它将返回 NULL。
char *getstrafter(const char *str, char c)
{
if(str)
{
while(*str)
{
if(*str == c) break;
}
}
return (char *)((str && !*str) ? NULL : str + 1);
}
char *getstrafter1(const char *str, char c)
{
if(str)
{
str = strchr(str, c);
if(str) str++;
}
return str;
}
【讨论】:
str == NULL 两次
您可以使用 strrchr 函数来搜索最后出现的字符。然后你只需要复制你的字符串来只保留你想要的。类似的东西:
char src[12] = "Hello World";
char *dest = NULL;
dest = strdup(strrchr(src, ' '));
【讨论】: