使用while循环反转C语言中的字符串

时间:2019-04-29 09:12:41

标签: c

该代码基本上应该采用字符串,例如,假设输出为“ 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)
}

5 个答案:

答案 0 :(得分:4)

您的代码似乎混合了使用索引(例如0strlen(s)-1)或使用指针的概念。即使在注释中,您也写了“交换字符s[i]s[j]”,但是您将ij声明为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)

ij的值仅是一个数字,表示您感兴趣的值在字符串中的位置。

但是,当您进行实际交换时,即使您的注释指出了正确的解决方案,您似乎也错过了这一点。

所以代替:

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; 
}