问题描述
我是 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 (将#修改为@)