2017-10-20 19 views
-4

関数char *my(char *s, int n)は、文字列sを受け取り、の文字をn個分シフトして、文字列を囲むようにします。ポインタを使用して文字列を2つの文字列に分割する方法は? C言語

たとえば、「This is my Apple!」という文字列が指定されています。 、n個のシフト= 2は

  • 文字列1になります: "Thを"
  • 文字列2を: "私のアップルです!"

n < 0負の方向にシフトします。

+0

ストリングは、それが返されます発見された場合は、 'はstrstr()は'使用することができます。 –

+0

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

+0

私が知る限り、あなたが記述する関数は通常のライブラリには存在しません。しかし、この仕様では、タイトルの質問に答えるために使用できるかのように表示されます。 – Yunnosch

答えて

1

に基づいて文字をシフトする独自の関数を作成するための機能でそれを置くことができます。結果を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

printfを使う代わりにreturnを使う方法 – bob90937

+0

私は結果を出力する代わりに 'char *'を返すように関数を修正しました。 –

1

文字列は実際にはchar配列のchar [] です。strlen関数をforループと組み合わせて使用​​できます。

あなたは単なる文字列を分割するprintfを使用することができ、入力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) 'strlen'に' #include 'を入れてください。 2) 'char string1 [n];' - > 'char string1 [n + 1];':ヌルターミネータの場合は+1。 – BLUEPIXY

+0

char string1 [n];エラー:定数値 – bob90937

+0

が必要です。 "int n = 2"を初期化する前に "char string1 [n]"を初期化するとエラーが発生しますが、 。 –

関連する問題