c - 删除字符串的子字符串

标签 c

所以我在 Talentbuddy 上做了一些编码练习(对于那些知道的人),我不明白为什么我不能完成这个练习。 该练习是从字符串中删除子字符串,给出字符串输入,开始删除字符的位置 P 和需要删除的字符数 N。

这是我所做的:

#include <stdio.h>
#include <unistd.h>

void remove_substring(char *s, int p, int n) 
{
    int idx;

    idx = -1;
    while (s[++idx] != '\0')
       write(1, &s[idx == p - 1 ? idx + n : idx], 1);
}

当输入为“abcdefghi”、P = 9 且 N = 1 时,给出的结果为“abcdefgh”,与我使用函数得到的结果完全相同。但 TalentBuddy 一直说我的输出是错误的,我不认为他(talentbuddy)错了。 也许“h”和“\0”之间有空格或其他东西。 但我无法理解它,因为当我在末尾添加另一个 write(1, "END", 3) 时,它看起来像“abcdefghEND”。

最佳答案

如果问题专门针对字符串( NULL 终止) 为什么不能这么简单呢,除非是作业。

void removesubstr( const char *string, const char *substring )
{
        char *p = strstr(string, substring);
        if(p)
        {
                strcpy(p,p+strlen(substring));
        }
}

关于c - 删除字符串的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748743/

相关文章:

c++ - 是否有任何 C 或 C++ 编译器在定义宏中进行优化?

c - for循环无故停止

c - LLDB获取argv的内存地址

c - Xcode可以跳转到c站lib的#define

c - 如何调用数组的多个元素

c - 为什么声明 unsigned char "Volatile"会使其与 "non-volatile"unsigned char 不兼容?

javascript - C 和其他语言中的预增量行为

c - main() 的多重定义

c - 理解合并两个排序链表的算法

C:指向结构体内部函数的指针会导致段错误