我有一个文本,我想要对其中的每个单词进行右移,同时忽略以下字符:" ",",","?","!","。",双引号,单引号。 我尝试了很多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;
}
}
}
答案 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]
更容易阅读。