我正在撰寫一個函式來重新排列字串的字符。我用 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] = '\0';
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;
}
uj5u.com熱心網友回復:
在這個 for 回圈的第一次迭代中
for(i = 0; i < len/2; i ){
ans[index ] = s[i];
ans[index ] = s[len - i];
}
字符ans[1]
設定為s[len]
(在回圈的第一次迭代中i
等于0
),即'\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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/526656.html