関数char *my(char *s, int n)
は、文字列s
を受け取り、の文字をn
個分シフトして、文字列を囲むようにします。ポインタを使用して文字列を2つの文字列に分割する方法は? C言語
たとえば、「This is my Apple!」という文字列が指定されています。 、n個のシフト= 2は
- 文字列1になります: "Thを"
- 文字列2を: "私のアップルです!"
n < 0負の方向にシフトします。
関数char *my(char *s, int n)
は、文字列s
を受け取り、の文字をn
個分シフトして、文字列を囲むようにします。ポインタを使用して文字列を2つの文字列に分割する方法は? C言語
たとえば、「This is my Apple!」という文字列が指定されています。 、n個のシフト= 2は
n < 0負の方向にシフトします。
に基づいて文字をシフトする独自の関数を作成するための機能でそれを置くことができます。結果を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;
}
printfを使う代わりにreturnを使う方法 – bob90937
私は結果を出力する代わりに 'char *'を返すように関数を修正しました。 –
文字列は実際には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;
}
ストリングは、それが返されます発見された場合は、 'はstrstr()は'使用することができます。 –
[memcpy](http://en.cppreference.com/w/c/string/byte/memcpy)を使用しますか? – BLUEPIXY
私が知る限り、あなたが記述する関数は通常のライブラリには存在しません。しかし、この仕様では、タイトルの質問に答えるために使用できるかのように表示されます。 – Yunnosch