所以这里似乎有过多的字符串反转问题,但我想要做的具体内容似乎没有被涵盖。我这样做只是因为C中的复习没有重要意义。我想要达到的标准,
1.编写一个可以反转字符串的函数
2.不得改变原来的
3.只能将原始字符串作为参数
4.不应使用现有的字符串反转功能
我最初编写了简单的代码来进行反转,但是很难让它不改变原始代码。初始代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *reverse(char *inString){
int j = 0;
j = strlen(inString) -1;
char temp;
for(int i = 0 ; i<=j; i++,j--){
temp = inString[i];
inString[i] = inString[j];
inString[j] = temp;
}
return inString;
}
int main(){
char string[20]="hello world";
printf("%s\n",string);
char *outString = reverse(string);
printf("%s\n",string);
printf("%s\n",outString);
}
输出:
hello world
dlrow olleh
dlrow olleh
答案 0 :(得分:4)
我的建议:
类似的东西:
char *reverse(char *inString)
{
int len = strlen(inString);
char* retString = malloc(len+1);
if ( retString != NULL )
{
for(int i = 0 ; i < len; ++i)
{
retString[len-1-i] = inString[i];
}
retString[len] = '\0';
}
return retString;
}
答案 1 :(得分:2)
这是一个演示程序,显示了如何编写函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * reverse( const char *s )
{
size_t n = strlen( s );
char *t = malloc( ( n + 1 ) * sizeof( char ) );
if ( t )
{
size_t i = 0;
for ( ; i < n; i++ ) t[i] = s[n - i - 1];
t[i] = '\0';
}
return t;
}
int main(void)
{
char *s = "Hello World";
char *t = reverse( s );
puts( s );
puts( t );
free( t );
return 0;
}
程序输出
Hello World
dlroW olleH
如你所见,你必须为反向字符串分配内存。
答案 2 :(得分:0)
string和outString引用内存中的同一个对象,即&#34; hello world&#34;字符串数组,这就是为什么你得到相同的反向字符串。
您可以复制数组并反转副本,也可以将字符串反转为原始形式。
答案 3 :(得分:0)
你的问题是你确实正在修改你的输入字符串,在行:
inString[i] = inString[j];
你不需要做这样的事情。只需在内存中对其适当的空间进行malloc后,设置输出字符串的第j个字符。