【问题标题】:C programming: Delete string before first space [closed]C编程:在第一个空格之前删除字符串[关闭]
【发布时间】:2021-06-30 21:39:11
【问题描述】:

我想输入一个字符串并删除第一个“空格”之前的所有内容。

这是一个例子:

之前

Hello world

之后

world

【问题讨论】:

  • 到目前为止您尝试过什么?显示您的代码!你认为我们会为你写吗?提示:使用strchr查找空间,如果找到则使用strcpy

标签: c


【解决方案1】:

此代码应该适合您。它利用了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];

【讨论】:

  • 是的,很有效,我显然需要更多地练习指针
  • @Nikola 实际上代码中存在错误。我现在更新了我的答案。
  • @Nikola 如果您对指针不是很熟悉,我现在在我的答案中添加了第二种可能更容易理解的方法。
  • 你的代码不正确
  • 如果没有找到空格,它将设置指针以引用字符过去空字符(在这种情况下超出字符串文字范围),即UB跨度>
【解决方案2】:

要涵盖极端情况,您需要进行一些检查。如果传递的指针为 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 两次
【解决方案3】:

您可以使用 strrchr 函数来搜索最后出现的字符。然后你只需要复制你的字符串来只保留你想要的。类似的东西:

char src[12] = "Hello World";
char *dest = NULL;

dest = strdup(strrchr(src, ' '));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 2015-12-22
    • 2015-04-27
    • 2013-07-28
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多