该代码基本上应该采用字符串,例如,假设输出为“ abc de fgh”
cba
ed
hgf
这里显示的我的代码确实将字符串放在一行中,但是没有反转它们。我在想出那部分以及如何从方法中的参数中使用char *时遇到麻烦。在正确方向上的任何帮助都将非常有用!
void stringReverse(char* s){
char* i = 0;
char* j = strlen(s)-1;
//in order to swap the characters s[i] and s[j] make a temp
char* temp;
while(i < j){
temp = i;
i = j;
j = temp;
i++;
j--;
}
//end of the while loop means that it reversed everything (no need for if/else)
}
答案 0 :(得分:4)
您的代码似乎混合了使用索引(例如0
或strlen(s)-1
)或使用指针的概念。即使在注释中,您也写了“交换字符s[i]
和s[j]
”,但是您将i
和j
声明为char*
变量。
第二个错误是交换指针值,而不是指针指向的字符。
您应该决定是否要使用指针或索引来访问字符。
使用指针的解决方案:
void stringReverse(char* s){
//in order to swap the characters s[i] and s[j] make a temp
char temp;
char* i = s;
/* according to the standard, the behavior is undefined if the result
* would be one before the first array element, so we cannot rely on
* char* j = s + strlen(s) - 1;
* to work correct. */
char* j = s + strlen(s);
if(j > i) j--; // subtract only if defined by the C standard.
while(i < j){
temp = *i;
*i = *j;
*j = temp;
i++;
j--;
}
//end of the while loop means that it reversed everything (no need for if/else)
}
使用索引的解决方案:
void stringReverse(char* s){
size_t i = 0;
size_t j = strlen(s)-1;
//in order to swap the characters s[i] and s[j] make a temp
char temp;
while(i < j){
temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
//end of the while loop means that it reversed everything (no need for if/else)
}
如果启用了足够的警告,则编译器应警告原始源代码中的某些问题。我建议始终启用尽可能多的警告。
答案 1 :(得分:2)
i
和j
的值仅是一个数字,表示您感兴趣的值在字符串中的位置。
但是,当您进行实际交换时,即使您的注释指出了正确的解决方案,您似乎也错过了这一点。
所以代替:
temp = i;
i = j;
j = temp;
尝试:
temp = s[i];
s[i] = s[j];
s[j] = temp;
也如注释中所述,如果一个函数被声明为返回void,则不应返回值。
答案 2 :(得分:0)
您想要这个。注释中的解释。
void stringReverse(char* s) {
int i = 0; // int instead of char*
int j = strlen(s) - 1; // int instead of char*
char temp; // char instead of char*
while (i < j) {
temp = s[i]; // actually exchange the two characters
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
答案 3 :(得分:0)
这里没有使用任何临时变量,我没有测试这段代码,这是我在面试中遇到类似问题的方式
void stringReverse(char* str){
char* i = 0;
char* j = strlen(str);
while(i < (j/2)){
strl[j]= str[j-i-1];
str[i+1] = str[j];
str[i]=str[j];
i++;
}
str[j]="\0";
}
答案 4 :(得分:0)
也可以尝试
#include<stdio.h>
#include<string.h>
int main()
{
char str[10] = "abc";
printf("The given string is =%s\n",str);
printf("After reversing string is =%s",strrev(str));
return 0;
}