如何解决在 C 中反转句子,单词之间只有一个空格字符
我是 C 的新手,我正在尝试反转 C 中的字符串(字符指针)并将其存储在字符指针中。条件是倒置的句子不应该有任何尾随或前导空格,并且单词之间也不应该有超过一个空格。
示例:输入:“天空是”
预期输出:“si yks eht”
char * reverseWords(char * s){
char* rev = malloc(24);
int i=strlen(s)-1; int j = 0;
for(; i>=0; i--){
if(i == strlen(s)-1 && isalpha(s[i]) || i > 0 && (isalpha(s[i]) || s[i] == ' ' && isalpha(s[i-1]))){
printf("i at pos: %d char: %c j:%d rev[j]: %c\n",i,s[i],j,rev[j]);
rev[j++] = s[i];
printf("j: %d rev[j]: %c\n",rev[j]);
}
}
rev[j] = '\0';
printf("After 1 rev:\"%s\"\n",rev);
return rev;
}
我有几个问题:
- 我知道我的 if 条件逻辑不正确,您能帮我纠正吗?
- 此外,当我尝试打印 rev[j] 时,我得到了
i at pos: 13 char: j:0 rev[j]: �
j: 1 rev[j]: �
i at pos: 12 char: s j:1 rev[j]: �
j: 2 rev[j]: �
i at pos: 11 char: i j:2 rev[j]: �
j: 3 rev[j]: �
....
我预计会出现段错误,但在初始化前后访问 rev[j] 时我看到无法识别的字符
- 我看过一些代码,它们以这种方式访问 malloced char 数组 --> *rev++ = *s++。正确的做法是什么?我什么时候应该使用索引 (rev[0]) 与指针访问 *rev = *s ?
编辑:按照我的逻辑工作,现在似乎正在工作:
char * reverseWords(char * s){
char* rev = (char *)malloc((sizeof(char))*(1024);
int i=0,j = 0,p =0;
for(int i = strlen(s)-1; i>=0; ){
while(i >=0 && s[i] == ' ')
i--;
j= i-1;
while(j >= 0 && s[j] != ' ')
j--;
if(i >= 0 && j >=-1 ){
for(int k=i; k > j; k--){
rev[p] = s[k];
p++;
}
rev[p++] = ' ';
}
i = j-1;
}
rev[p-1]='\0';
return rev;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。