【问题标题】:How can ı remove character from string in c [closed]如何从c中的字符串中删除字符[关闭]
【发布时间】:2021-12-25 13:26:49
【问题描述】:

谁能帮帮我。我想从 C 中的char* 中删除字符。

例如,char *str 这个 str 等于“apple”,首先我删除 1. 字符并定义一个新变量,然后删除 2. 字符并定义新变量,依此类推,直到 str 结束。

我怎么能做到这一点?我对 C 完全陌生,似乎无法弄清楚

【问题讨论】:

  • 考虑使用 strdup 创建从 str+1、str+2、...、str + strlen(str) - 1 复制的新字符串。
  • 你能提供预期的输入和预期的输出吗?您是否尝试过任何方法来实现这些目标?
  • 如果要从左边删除,其实不需要删除:只需从右边开始1个字符...printf("%s\n", "apple"); printf("%s\n", "apple" + 1); printf("%s\n", "apple" + 2); printf("%s\n", "apple" + 3);

标签: c string c-strings


【解决方案1】:

假设您只需要从左侧删除字符。

由于 C 中的字符串是字符数组,而数组是指向数组第一个元素的指针,因此您可以创建指向原始 char 数组中特定索引的变量。

例如

char* myString = "apple";
char* subString = myString+1;

printf("%s\n%s\n", myString, substring);

会产生输出

apple
pple

我们可以将其概括为将通过从左侧删除字符获得的所有子字符串存储在 char* 指针(指向指针的指针)数组中。像这样:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char** GetSubStrings(char* input)
{
    int length = strlen(input);
    char** result = calloc(length, sizeof(char*));
    
    for(int i = 0; i < length; i++)
    {
        result[i] = input + i;
    }
    
    return result;
}

int main()
{
    char* myString = "apple";
    
    char** subStrings = GetSubStrings(myString);
    
    for(int i = 0; i < strlen(myString); i++)
    {
        printf("%s\n", subStrings[i]);
    }
    
    free(subStrings);
    
    return 0;
}

【讨论】:

  • 非常感谢
  • 数组是 not 指向第一个元素的指针。但按照惯例,我们通常使用指向第一个元素的指针来传递数组。
  • 此代码过于复杂,可能会给 OP 一种印象,即已分配多个子字符串,因此可以安全地独立操作。一个更简单的解决方案,例如您的主 for 循环中的 printf("%s\n", myString + i) 将同样工作,完全不需要 GetSubStrings。
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
相关资源
最近更新 更多