source
という文字列を受け取るプログラムを作成しました。その後、insertion
という別の文字列を受け入れることができます。ユーザは、source
にinsertion
を挿入することを選択します。その後、結果を印刷します。2つの文字列をスペースで入力できないのはなぜですか?
"the young son"
のような文字列を入力すると、プログラムは正常に実行されます。 source[]
のscanf
の機能の間に、単に[^\n]
を追加することができます。
I、入力"per"
が定期的にscanf
を使用してposition = 10
でそれを置くことを選択した場合、その後、私が手にうまく"the young person"
をプリントアウトします。私が完了し"the fat cat"
を期待して、"the cat"
に入れるためにこのような"fat "
として、スペースで挿入を持っていることを選択した場合、私は通常と一緒にたくさんそれをように進めた場合
しかし、それはスペースを無視します。
OR、私はあまりにも挿入するためscanf
に[^\n]
を追加する場合、それは実際に以前を相殺することを決定し、それも私が入力insertion
できません、それだけで"the"
と"cat"
を使用し、彼らは別々だと仮定し。
これを回避する手段はありますか?
printf
とscanf
以外のライブラリ関数を使用することは許可されていませんが、これは学習の練習であったことに注意してください(これはすでに基準をクリアしています)。私はまだカバーされていないので、ポインタ構文を使用することはできませんし、先をスキップしたくありません。
ありがとうございました!ここで
は、以下の私のコードです:
#include <stdio.h>
void insertString(char source[], char insertion[], int position);
int stringLength(const char string[]);
int main(void)
{
int position;
char source[40];
char insertion[40];
printf("What's your first string?\n");
scanf("%[^\n]s", source);
printf("What do you want to insert?\n");
scanf("%[^\n]s", insertion);
printf("Where do you wanna put it?\n");
scanf("%i", &position); //
// call function
insertString(source, insertion, position);
// print out result, stored in source
printf("Here's the result: %s\n", source);
return 0;
}
void insertString(char source[], char insertion[], int position)
{
int i, j;
// Find length of string
int lengthBig = stringLength(source);
int lengthSmall = stringLength(insertion);
int lengthTotal = (lengthBig + lengthSmall) -1;
// move up source characters after position
for(i = lengthBig - 1; i >= position; i--)
{
source[i + (lengthSmall) ] = source[i];
}
// move in insertion characters
for(j = lengthSmall-1; j >= 0; j--)
{
source[position + j] = insertion[j];
}
// add null character
source[lengthTotal + 1] = '\0';
}
int stringLength(const char string[])
{
int count =0;
while(string[count] != '\0')
count++;
return count;
}
' "%の[^ \ n]は、S"' - > ' "%39 [^ \ nを]%※C"' – BLUEPIXY
あなたはscanf' 'のことを聞いたことは忘れて、代わりに' fgets'を使用(もしあなたがそれを持っていれば、 'getline');これは 'scanf'への最初の2回の呼び出しのための置き換えです。三番目には 'strtol'も必要です。 – zwol