2015-10-07 161 views
0

我想从给定的字符串中删除所有重复的字符。 例如“asdasd”=“asd”或“abbgga”=“abg”。从字符串中删除所有重复的字符-c

当我编译时,当cmd开始运行它,我得到“停止工作”的消息。

这是我的代码:

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

void delMul(char str[]){ 
    int i,j=0; 
    int s[26]; 
    char k ; 
    for (i = 0; i < 26; i++) 
    { 
     s[i] = 0; 
    } 
    for (i = 0; i < strlen(str); i++) 
    { 
     k = str[i] - 'a'; 
     if(s[k] == 0) { 
      s[k]++ ; 
      str[j++] = str[i]; 
     } 
    } 
    str[j] = '\0'; 
} 

int main(){ 
    char *str = "asdasd"; 
    delMul(str); 
    puts(str); 
} 
+0

你试过调试吗? – Bathsheba

+2

更改'char * str =“asdasd”;'为'char str [] =“asdasd”;'如第一种情况一样'str'是存储在只读存储器中的字符串文字。 –

+2

第一个问题:有256个字符不仅仅是26,而且需要允许所有这些字符。第二个问题:数组“asdasd”是一个字符串字符串,而字符串文字处于只读内存,所以这个语句:'str [j ++] = str [i];'会导致seg故障事件。 – user3629249

回答

2

在你的代码,str指向字符串字面,这可能不会被修改。尝试使用数组来初始化字符串。

1

在主已宣布str作为字符串指针的

所以存储分配为程序中的固定的字符串,而不是作为数据

所以,当你试图在行写入其18 str[j++]=str[i]有一个 SEGV,因为这是不允许的

要纠正此声明字符串作为字符数组被代替初始化

int main(){ 
    char str[] = "asdasd"; 
    delMul(str); 
    puts(str); 
}