正确地从文本中置换单词

时间:2015-12-11 22:54:22

标签: c string pointers

我有一个文本,我想要对其中的每个单词进行右移,同时忽略以下字符:" ",",","?","!","。",双引号,单引号。 我尝试了很多approches,但似乎没有人工作(我几乎一直都收到Segmentation Fault)。 例如:对于nr_permutari = 1和text =" .abcd。!" ,文本将变为:" .dabc!"

这是我的代码:

void permutari (char *text,char * nr_permutari) {

    int numar_permutari=atoi(nr_permutari);     
    int i,j,k; 
    for(j=1;j<=numar_permutari;j++)     {
        for (i=0; i <strlen(text)-1; i++)   { 
                k=i;
                while(*(text+k)!='\n' && *(text+k)!='.' 
                   && *(text+k)!=',' && *(text+k)!=' '
                   && *(text+k)!='?' && *(text+k)!='!')

                    k++;
                while(i<k-1) {
                    char *temp;
                    temp = *(text+i);
                    *(text+i) = *(text+i+1);
                    *(text+i+1) = temp;
                    i++;
                }
                i=k;
        }
    }   
}

1 个答案:

答案 0 :(得分:0)

第一

while(*(text+k)!='\n' && *(text+k)!='.' 
               && *(text+k)!=',' && *(text+k)!=' '
               && *(text+k)!='?' && *(text+k)!='!')

需要测试\0(字符串结尾)......

while(*(text+k)!='\n' && *(text+k)!='.' 
               && *(text+k)!=',' && *(text+k)!=' '
               && *(text+k)!='?' && *(text+k)!='!'
               && *(text+k))

然后

char *temp;

应该是

char temp;

顺便说一下*(text+k) text[k]更容易阅读。