我正在编写一个函数来重新排列字符串的字符。我用malloc分配了新字符串并初始化它,然后返回它。但是当我返回它时,它总是只返回第一个字符。
我尝试逐个打印新字符串的字符,它们打印正确,但是当我调用该函数时,只返回第一个字符。我不知道为什么。任何帮助将不胜感激! 这是我的代码:
char * solution(char * s) {
int len = strlen(s);
int i;
int index = 0;
char *ans = (char *) malloc(sizeof(char) * (len + 1));
if (ans == NULL) {
fprintf(stderr, "Ran out of space in some function n");
exit(1);
}
//char* ans = (char *) malloc(len + 1);
ans[len] = ' ';
for(i = 0; i < len/2; i++){
ans[index++] = s[i];
ans[index++] = s[len - i];
}
if(len % 2 == 1){
ans[index] = s[len/2];
}
return ans;
}
在 for 循环的第一次迭代中
for(i = 0; i < len/2; i++){
ans[index++] = s[i];
ans[index++] = s[len - i];
}
字符ans[1]
设置为s[len]
(i
等于循环第一次迭代中的0
),即' '
。
结果,您将获得一个仅包含一个字符的字符串。
你所做的就是你得到的:)
看来你的意思是
ans[index++] = s[len - i - 1];
请注意,由于源字符串在函数中没有更改,因此函数应该像
char * solution( const char * s );
原始声明
char * solution(char * s);
表示字符串将就地更改。
如果要就地更改字符串,则该函数可以按以下方式查看,如下面的演示程序所示。
#include <string.h>
#include <stdio.h>
char * solution( char *s )
{
size_t n = strlen( s );
for (size_t i = 1; i < n; i += 2)
{
char c = s[n - 1];
memmove( s + i + 1, s + i, n - i - 1);
s[i] = c;
}
return s;
}
int main( void )
{
char s[] = "0123456789";
puts( s );
puts( solution( s ) );
}
程序输出为
0123456789
0918273645