一、題目要求
編寫一個函數,根據用戶定義字符串和需要移動字符的位數n,將該字符串從右邊起n個字符順序不變的放在該字符串的前面。例如:將 helloworld 右移兩位爲 ldhellowor .
二、問題分析
首先這個函數是有兩個參數,字符串str和移動位數n。我在這裏的思路是:先計算出該字符串的長度len,再設置一個指針p指向該字符串需移動字符的前一個字符,即字符r,開闢一個臨時的數組來存放需要移動的字符,該臨時數組是指針tmp指向的,然後將p指向n+1個字符處,把str中剩下的字符拷貝入tmp中,在進行此操作之前要記住需給該字符串添加一個結束標誌。最後,函數需要的是輸出改變後的數組,所以還需要將臨時數組中存放的字符串重新拷回原字符串中輸出即可。
值得提醒的一點是:這裏使用了動態申請內存空間,需要引用頭文件 #include<stdlib.h>,記住還需要手動釋放申請空間。
三、代碼實現
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void right_str(char *str,int n)
{
int len = strlen(str) + 1;
char *p = str + len -1 - n;
char *tmp = (char *)malloc(len * sizeof(char));
if( tmp == NULL)
{
printf("alloc error\n");
exit(-1);
}
strncpy(tmp,p,n);
*p = 0;
p = tmp + n;
strcpy(p,str);
strcpy(str,tmp);
free(tmp);
printf("%s\n",str);
}
int main()
{
char str[] = "hellworld";
right_str(str,2);
return 0;
}
四、自我總結
每一次寫博客都有不一樣的體驗,一個問題自己覺得懂了會了,如果不能用語言描述出來,還是說明不理解。我會堅持分享自己的編程,畢竟還是一個新手,大家一起學習進步吧。