2017-10-20 29 views
-4

函數char *my(char *s, int n)取字符串s,並將s的字符移位n個地方,導致字符環繞字符串。如何使用指針將字符串拆分爲兩個字符串? C語言

例如,給出字符串「This is my Apple!」 ,n的移= 2將導致

  • 的String1: 「TH」
  • String2的: 「是我的蘋果!」

if n < 0它會向負方向移動。

+0

你可以使用'strstr()',如果發現子字符串,它將被返回。 –

+0

使用[memcpy](http://en.cppreference.com/w/c/string/byte/memcpy)? – BLUEPIXY

+0

據我所知,你所描述的功能並不存在於通常的庫中。但是,規範的內容如同可以用它來回答標題中的問題一樣。 – Yunnosch

回答

1

你可以使用printf分割字符串轉變字母。如果你想在char *的結果,你必須分配一些內存,並使用sprintf

以下是使用sprintf和內存分配返回char *的示例。

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

char *shift(char *string, int n) 
{ 
    int len = strlen(string); 
    char *shiftedString = malloc(len + 1); 

    n %= len; // in case you shift over string length 
    if (n < 0) n += len; // backward shift 
    sprintf(shiftedString, "%s%*.*s", string + n, n, n, string); 
    return shiftedString; 
} 

int main() 
{ 
    char *result = shift("This is my Apple!", 2); 
    printf("shifted string : %s\n", result); 
    free(result); 
    return 0; 
} 
+0

如何使用return,而不是使用printf – bob90937

+0

我修改了函數來返回'char *'而不是打印結果。 –

1

該字符串實際上是一個char-array char [] 您可以使用strlen函數與for循環結合使用。

你可以把在這樣一個功能,創建自己的功能,將基於輸入N.

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

int main() 
{ 
    char string[] = "This is my Apple!"; 
    //Initialize "n" before initializing the string variables. 
    int n = 2; 
    int len = strlen(string); 
    char string1[n]; 
    char string2[len - n]; 

    for(int i = 0;i<len;i++){ 
     if(i<n){ 
      string1[i]=string[i]; 
     }else{ 
      string2[i-n]=string[i]; 
     } 
    } 
    printf("string = %s\n",string); 
    printf("string1 = %s\n",string1); 
    printf("string2 = %s\n",string2); 

    return 0; 
} 
+1

1)將'#include '換成'strlen'。 2)'char string1 [n];' - >'char string1 [n + 1];':+1爲null結束符。 – BLUEPIXY

+0

char string1 [n];錯誤:必須具有常數值 – bob90937

+0

如果在初始化「int n = 2」之前初始化「char string1 [n]」,將會出現錯誤,但是如果仔細查看我的代碼,您會注意到情況並非如此。 –

相關問題