C 什么&x2019;如果在创建交换函数时没有使用";临时工;变量 STREV的实现,即字符串反转功能*/ #包括 #包括 /*字符串的长度,即字符串中的单元格*/ 静态常量无符号整数最大长度=100; //静态常量int MAX_LENGTH=-100; /*反转字符串*/ 无效反向限制(字符[]); /*交换字符串单元格中的元素*/ 无效交换(字符[],整数,整数); /*运行程序*/ int main() { 字符字符串[最大长度]; //字符字符串[0];//没有错误! //字符字符串[-1];//错误! 获取(字符串); 反向限制(字符串); printf(“\n%s”,字符串); 返回0; } 无效反向字符串(字符字符串[]) { int i; 对于(i=0;i每当你需要交换某物时)

C 什么&x2019;如果在创建交换函数时没有使用";临时工;变量 STREV的实现,即字符串反转功能*/ #包括 #包括 /*字符串的长度,即字符串中的单元格*/ 静态常量无符号整数最大长度=100; //静态常量int MAX_LENGTH=-100; /*反转字符串*/ 无效反向限制(字符[]); /*交换字符串单元格中的元素*/ 无效交换(字符[],整数,整数); /*运行程序*/ int main() { 字符字符串[最大长度]; //字符字符串[0];//没有错误! //字符字符串[-1];//错误! 获取(字符串); 反向限制(字符串); printf(“\n%s”,字符串); 返回0; } 无效反向字符串(字符字符串[]) { int i; 对于(i=0;i每当你需要交换某物时),c,string,C,String,它不起作用,因为您不能使用此代码: /*implementation of strrev i.e. string reverse function*/ #include<stdio.h> #include<string.h> /*length of the string i.e. cells in the string*/ static const unsigned int MAX_LENGTH = 100; //static const int MAX_LENGTH

它不起作用,因为您不能使用此代码:

/*implementation of strrev i.e. string reverse function*/

#include<stdio.h>
#include<string.h>

/*length of the string i.e. cells in the string*/
static const unsigned int MAX_LENGTH = 100;
//static const int MAX_LENGTH = -100;

/*reverses the string*/
void reverseString(char[]);
/*swaps the elements in the cells of a string*/
void swap(char[], int, int);

/*runs the program*/
int main()
{
    char string[MAX_LENGTH];
    //char string[0];  //no error!
    //char string[-1]; //error! 

    gets(string);
    reverseString(string);
    printf("\n%s", string);

    return 0;
}

void reverseString(char string[])
{
    int i;
    for(i = 0; i < (strlen(string) / 2); i++)
    //for(i = 0; i <= ((strlen(string) - 1) / 2); i++)
    {
        swap(string, i, (strlen(string) - 1 - i));
    }
}

void swap(char string[], int i, int j)
{
    int temp = string[i];
    string[i] = string[j];
    string[j] = temp;
    /*     
    string[i] = string[i] + string[j];  //i = i + j
    string[j] = string[i] - string[j];  //j = i + j - j = i
    string[i] = string[i] - string[j];  //i = i + j - i = j
    */
}
将变量的值与其本身交换,因为它是同一个变量,而不是两个不同的变量,并且该值会被覆盖


<>我强烈建议你开始使用C++,并且使用<代码> STD::SWAP-()/代码>每当你需要交换某物时)

它不起作用,因为你不能使用这个代码:

/*implementation of strrev i.e. string reverse function*/

#include<stdio.h>
#include<string.h>

/*length of the string i.e. cells in the string*/
static const unsigned int MAX_LENGTH = 100;
//static const int MAX_LENGTH = -100;

/*reverses the string*/
void reverseString(char[]);
/*swaps the elements in the cells of a string*/
void swap(char[], int, int);

/*runs the program*/
int main()
{
    char string[MAX_LENGTH];
    //char string[0];  //no error!
    //char string[-1]; //error! 

    gets(string);
    reverseString(string);
    printf("\n%s", string);

    return 0;
}

void reverseString(char string[])
{
    int i;
    for(i = 0; i < (strlen(string) / 2); i++)
    //for(i = 0; i <= ((strlen(string) - 1) / 2); i++)
    {
        swap(string, i, (strlen(string) - 1 - i));
    }
}

void swap(char string[], int i, int j)
{
    int temp = string[i];
    string[i] = string[j];
    string[j] = temp;
    /*     
    string[i] = string[i] + string[j];  //i = i + j
    string[j] = string[i] - string[j];  //j = i + j - j = i
    string[i] = string[i] - string[j];  //i = i + j - i = j
    */
}
将变量的值与其本身交换,因为它是同一个变量,而不是两个不同的变量,并且该值会被覆盖


<>我强烈建议您开始使用C++,使用<代码> STD::SWAP-()/代码>每次需要交换的东西=

< P>没有临时性的交换函数的版本取决于两个索引彼此不同。 假设
i
j
是相同的。那么您实际上拥有以下内容:

string[i] = string[i] + string[j];  //i = i + j
string[j] = string[i] - string[j];  //j = i + j - j = i
string[i] = string[i] - string[j];  //i = i + j - i = j
因此,将一个元素与自身交换将使其归零

现在,在使用
i<(strlen(string)/2)
作为条件时,查看
reversesetring
中的循环。如果字符串的长度为奇数,则循环在到达中间元素之前停止,因此不会发生元素与自身的交换


但是当
i时,不带temp的swap函数的版本取决于两个索引彼此不同

假设
i
j
是相同的。那么您实际上拥有以下内容:

string[i] = string[i] + string[j];  //i = i + j
string[j] = string[i] - string[j];  //j = i + j - j = i
string[i] = string[i] - string[j];  //i = i + j - i = j
因此,将一个元素与自身交换将使其归零

现在,在使用
i<(strlen(string)/2)
作为条件时,查看
reversesetring
中的循环。如果字符串的长度为奇数,则循环在到达中间元素之前停止,因此不会发生元素与自身的交换


但是当
i时,我会建议减少
strlen
调用。你的代码太复杂了

string[i] = string[i] + string[i];  // string[i] is now 2 * string[i]
string[i] = string[i] - string[i];  // string[i] is now always 0
string[i] = string[i] - string[i];  // still 0

我建议减少strlen调用。你的代码太复杂了

string[i] = string[i] + string[i];  // string[i] is now 2 * string[i]
string[i] = string[i] - string[i];  // string[i] is now always 0
string[i] = string[i] - string[i];  // still 0

因为
i
不同于
i use而不是
get
,这是一个开始学习如何使用调试器的绝佳机会。你需要掌握调试程序的艺术。那里有一个很棒的教程,可以教你这项宝贵的技能:你确定调用
strlen 在字符串上每次迭代两次…?为什么不干脆
inti=0,j=strlen(string)-1;用于(;iCause
i
不同于
i use而不是
get
这是一个开始学习如何使用调试器的绝佳机会。你需要掌握调试程序的艺术。那里有一个很棒的教程,教你这项宝贵的技能:你确定调用
strlen是个好主意吗每串迭代两次……为什么不只是代码> int i=0,j=StrLLN(String)- 1;对于(问题中的语言是代码> C<代码>代码。虽然我同意C++使你的生活变得更容易(直到它不)。建议改变语言是有点傲慢的。在代码> C>代码>语言中,有非常有效的应用程序,语言的改变本身是不实用的或不可能的。语言中的语言是“代码> C <代码>。虽然我同意你的说法,C++使你的生活变得更容易(直到它没有)。,建议更改语言有点自以为是。
C
语言存在完全有效的应用程序,其中更改语言本身并不实际或明显不可能。