ので、あなたのデータ構造は、このようなものであると仮定することができます、[OK]を:
char clipboard[1024]; // max of 1024 chars in the clipboard.
void cut(struct Textview *textview)
{
// first we copy the text out (assuming you have
int nCpy = textview->endRange - textView->startRange >= 1024 ? 1023 : textview->endRange - textview->startRange;
strncpy(clipboard, textview->text + textview->startRange, nCpy);
// next, we remove that section of the text
memmove(textview->text + textview->startRange, textview->text + textview->endRange, strlen(textview->text + textview->endRange);
}
コピー機能:
void copy(struct Textview *textview)
{
int nCpy = textview->endRange - textView->startRange >= 1024 ? 1023 : textview->endRange - textview->startRange;
strncpy(clipboard, textview->text + textview->startRange, nCpy);
}
我々はカット機能を追加したときに、そう
struct Textview {
char *text;
int startRange;
int endRange;
};
そして、ペースト機能。
void paste(struct Textview *textview)
{
// assuming we have enough space to paste the additional characters in.
char *cpyText = strdup(textview->text); // if strdup isn't available, use malloc + strcpy.
int cpyTextLen = strlen(cpyText);
int clipboardLen = strlen(clipboard);
memcpy(textview->text + textview->startRange, clipboard, clipboardLen);
memcpy(textview->text + textview->startRange + clipboardLen, cpyText + textview->startRange + 1, cpyTextLen) - textView->startRange);
textview->text[textView->startRange + clipboardLen + cpyTextLen + 1] = '\0';
free(cpyText);
}
元に戻すには、行った変更のスタックが必要です。
あなたはこれまでのあなたのクリンボーディングの方向で何をしましたか? –
私は実装部分を開始していません。私はこれをどのように達成できるか考えてみたいですか?それはスタックのようないくつかのデータ構造の使用を必要とするか、それを行う他の方法がありますか? – user1002416