請各位大佬幫忙看看。
程式在vs2019能運行。下面給vs2019運行的結果截圖。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
class String
{
private:
char* str;
public:
String(char* s)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
long getlen()
{
return strlen(str) + 1;
}
char* get()
{
return str;
}
void print()
{
cout << "Original string" << str << endl;
}
~String()
{
delete str;
}
};
class edit_string :public String
{
private:
char* str;
unsigned int cur;
int count;
public:
edit_string(char* s) :String(s)
{
cur = 0;
str = new char[strlen(s) + 1];
strcpy(str, s);
cout << "Input string:" << endl;
}
void displaycursor()
{
int i,j;
long int m;
char* t;
m = strlen(str) + 2;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i + 1] = str[i];
}
t[i] = '_';
if(count>0)//xcode失效
{
for(j=strlen(str)+8;j;j--)
{
printf("\b");
}
}
cout << "游標點的位置為:" << t << endl;
}
void setcurright()
{
if (cur < strlen(str) + 1)
cur++;
displaycursor();
}
void setcurleft()
{
if (cur > 0)
cur--;
displaycursor();
}
void insert(char c)
{
int i;
long int m;
char* t;
m = strlen(str) + 2;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i + 1] = str[i];
}
t[i] = c;
strcpy(str, t);
cout << "編輯后的陣列為:" << t << endl;
}
void deletes()
{
int i;
long int m;
char* t;
m = strlen(str) + 2;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i + 1] = str[i];
}
t[i - 1] = t[i];
for (i = cur; i < strlen(str) + 2; i++)
{
t[i] = str[1];
}
strcpy(str, t);
cout << "編輯后的陣列為:" << t << endl;
}
char* get()
{
return str;
}
void replace(char c)
{
str[cur] = c;
cout << "編輯后的陣列為:" << str << endl;
}
void print()
{
}
~edit_string()
{
delete str;
}
};
int main()
{
char ch;
char* s=0;
cout << "Input string:";
cin >> *s;
edit_string a(s);
while (true)
{
ch = _getch();
if (ch == -32)
{
ch = _getch();
switch (ch)
{
case 75:
a.setcurleft();
break;
case 77:
a.setcurright();
break;
default:
break;
}
}
if (97 <= ch && ch <= 122)
{
a.insert(ch);
}
if (ch == 8)
{
a.deletes();
}
}
return 0;
}

運行之后,輸入任意字符都會報錯:
引發了例外: 寫入訪問權限沖突。
_Str 是 0x1110112。
uj5u.com熱心網友回復:
char* s=0cin >> *s;
問題應該出在這兒,*s指向字串常量,不能賦值。用 char s[],試試看
uj5u.com熱心網友回復:
#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
using namespace std;
class String
{
private:
char* str;
public:
String(char* s)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
void getlen()
{
cout << "原字串長度為:" << strlen(str) << endl;
}
char* get()
{
return str;
}
void print()
{
cout << "Original string" << str << endl;
}
~String()
{
delete str;
}
};
class edit_string :public String
{
private:
char* str;
unsigned int cur;
int count;
public:
edit_string(char* s) :String(s)
{
cur = 0;
str = new char[strlen(s) + 1];
strcpy(str, s);
cout << "輸入的字串為:" << str << endl;
}
void getlen()
{
cout << "當前字串長度為:" << strlen(str) << endl;
}
void displaycursor()
{
int i, j;
long int m;
char* t;
const char* z = "_";
char* zz = new char[strlen(z) + 1];
strcpy(zz, z);
m = strlen(str) + 2;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i + 1] = str[i];
}
t[cur] = *zz;
cout << "游標點的位置為:" << t << endl;
}
void setcurright()
{
if (cur < strlen(str) + 1)
cur++;
displaycursor();
}
void setcurleft()
{
if (cur > 0)
cur--;
displaycursor();
}
void insert(char c)
{
int i;
long int m;
char* t;
m = strlen(str) + 3;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i + 1] = str[i];
}
t[cur] = c;
str = new char [m];
strcpy(str, t);
cur++;
cout << "編輯后的陣列為:" << t << endl;
}
void deletes()
{
int i;
long int m;
char* t;
m = strlen(str) + 2;
t = new char[m];
strcpy(t, str);
for (i = cur; i < strlen(str) + 2; i++)
{
t[i - 1] = str[i];
}
strcpy(str, t);
cur--;
cout << "編輯后的陣列為:" << t << endl;
}
char* get()
{
return str;
}
void replace(char c)
{
str[cur - 1] = c;
cout << "編輯后的陣列為:" << str << endl;
}
void print()
{
}
~edit_string()
{
delete str;
}
};
int main()
{
re:
char ch;
char n[100];
cout << "注:按下左方向鍵為向左移動游標,按下右方向鍵為向右移動游標" << endl;
cout << " 按下delete鍵為洗掉字符,按下Enter鍵調出指令" << endl;
cout << "請輸入字串:";
cin >> n;
char* buf = new char[strlen(n) + 1];
strcpy(buf, n);
edit_string a(buf);
re2:
while (true)
{
ch = _getch();
if (ch == -32)
{
ch = _getch();
switch (ch)
{
case 75:
a.setcurleft();
break;
case 77:
a.setcurright();
break;
default:
break;
}
}
else if (32 < ch && ch <= 126)
{
a.insert(ch);
}
else if (ch == 8)
{
a.deletes();
}
else if (ch == 13)
{
char chh;
cout << "1、顯示當前字串長度" << endl;
cout << "2、顯示原字串長度" << endl;
cout << "3、清屏" << endl;
cout << "4、重啟程式" << endl;
cout << "5、回傳編輯操作" << endl;
cout << "按[esc]結束程式" << endl;
cout << "輸入操作指令:";
chh = _getch();
if (chh == 27)
goto re3;
cout << "[" << chh << "]" << endl;
switch (chh)
{
case 49:
a.edit_string::getlen();
cout << "指令操作已結束,當前為編輯操作" << endl;
break;
case 50:
a.String::getlen();
cout << "指令操作已結束,當前為編輯操作" << endl;
break;
case 51:
system("cls");
cout << "指令操作已結束,當前為編輯操作" << endl;
break;
case 52:
system("cls");
goto re;
break;
case 53:
cout << "已回傳編輯操作" << endl;
goto re2;
break;
default:
break;
}
}
}
re3:
cout << endl << endl << "程式已結束" << endl;
return 0;
}
完美解決
uj5u.com熱心網友回復:
建議大家貼代碼時,都 用格式工具,
哈哈哈
uj5u.com熱心網友回復:
格式工具是干嘛用的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/86026.html
標籤:C++ 語言
上一篇:C語言:求第n個到第m個之間的素數和。求大神解答一下我的代碼哪里出錯了?
下一篇:C++類與靜態成員
