如何删除数组中特定位置的字符?

时间:2016-10-01 07:35:23

标签: c arrays

所以,我正在尝试添加和删除数组中的字符。我有一个add_to_array函数,工作正常。它准确地打印出它应该是什么。但是,我似乎无法从数组的末尾删除一个字符。我尝试的代码是:

void delete_array(char *q, char f)
{
  char *blah = q;
  while(*blah != '\0')
  {
    blah--;
  }
  *blah = f;
  blah--;
  *blah = '\0';
 }

我的add_to_array的代码完全相同,除非它是blah ++,我认为删除一个字符恰恰相反。它编译,但它打印“分段故障(核心转储)”作为输出。我哪里错了?感谢您提出任何建议/帮助。

2 个答案:

答案 0 :(得分:1)

像这样:

#include <stdio.h>

void delete_array(char *str, char ch){
//To remove the specified character from a string
    char *to, *from;

    for(to = from = str; *from != '\0'; ++from){
        if(*from != ch)
            *to++ = *from;
    }
    *to = '\0';
}
int main(void){
    char str[] = "application";

    delete_array(str, 'p');
    printf("%s\n", str);//alication
    return 0;
}

如果删除特定位置的字符,则需要在参数中包含位置。

#include <stdio.h>

void delete_array(char *str, size_t pos){
//Delete the character of the position pos.
    char *p;

    for(p = str + pos; *p = p[1] ; ++p)
        ;
}
int main(void){
    char str[] = "application";

    delete_array(str, 3);
    printf("%s\n", str);//appication
    return 0;
}

答案 1 :(得分:-1)

以下代码显示了如何删除字符串中的字符。

void delete_array(char *q, char f)
{
  char *blah = q;
  char *temp;
  while(*blah != '\0')
  {
    if(*blah == f){
        while(*blah != '\0'){             
            temp = blah;            
            temp++;            
            *blah = *temp;            
            blah++;        
        }
        break;
    }    
    blah++;
  }
}