gpt4 book ai didi

c - 如何从字符串中的一组字符中去除前导字符?

转载 作者:行者123 更新时间:2023-11-30 20:39:38 27 4
gpt4 key购买 nike

我需要从 C 中的字符串中删除一组字符。

str = "01 " ,那么:

  1. "112345"输出应该是 "2345"
  2. "0 78abc"输出应该是 "78abc"
  3. " 7777"输出应该是 "7777"

希望您在示例的帮助下理解。

函数格式为:

char* StripLeadingChars(char* str, char* originalString)

编辑:很抱歉没有详细说明代码。我已经尝试对其进行编码,下面是我的代码。

char* StripLeadingChars(char* str, char* originalString)
{
for(int i=0;i<strlen(str);i++)
{
for(int j=0,k=0;j<=strlen(originalString);j++)
{
if(originalString[j]!=str[i])
originalString[k++] = originalString[j];
}
}
return originalString;
}

但是此代码会删除 OriginalString 中存在的所有 str 字符,如下所示。

str = "01 "

originalString="11230 45"

输出为"2345"而所需的输出是 "230 45"

请帮助我纠正我的代码。谢谢!

最佳答案

挑战在于处理所有案例,包括测试案例不匹配案例和所有匹配案例。以下是满足所有条件的尝试。 (如果所有字符都与 strip 字符匹配,则返回 NULL)内联提供注释:

#include <stdio.h>

char *StripLeadingChars (char *strip, char *string)
{
int prefix = 0; /* simple flag to test if in leading part of string */
char *p = string;
char *s = strip;

if (!p) {
fprintf (stderr, "%s() error: invalid string.\n", __func__);
return NULL;
}

while (*p) /* for every character in string */
{
while (*s) /* test each character in strip */
{
while (*p == *s || *p == ' ') { /* string char matches strip or space */
p++; /* increment sting pointer */
prefix = 1; /* flag char matched */
}
s++; /* increment strip pointer */
}

if (!prefix) /* break on first non-match of strip */
break;

prefix = 0; /* reset toggle */
}

return (*p) ? p : NULL; /* if p valid, return p, else NULL */
}

int main (int argc, char *argv[]) {

if (argc < 3 ) {
fprintf (stderr, "Error: insufficient input, usage: %s <strip> <string>\n", argv[0]);
return 1;
}

printf ("\nInput:\n\n string : %s\n\n strip : %s\n\n", argv[2], argv[1]);

printf ("\nstripped : %s\n\n", StripLeadingChars (argv[1], argv[2]));

return 0;
}

构建/运行:

gcc -Wall -Wextra -o bin/stripld stripleading.c

./bin/stripld 01 112345

Input:

string : 112345

strip : 01

stripped : 2345

./bin/stripld 01 "0 78abc"

Input:

string : 0 78abc

strip : 01

stripped : 78abc

./bin/stripld 01 " 7777"

Input:

string : 7777

strip : 01

stripped : 7777

./bin/stripld 01 "23 456"

Input:

string : 23 456

strip : 01

stripped : 23 456

./bin/stripld 01 "00 11"

Input:

string : 00 11

strip : 01

stripped : (null)

关于c - 如何从字符串中的一组字符中去除前导字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26380891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com