在输入了要删除的部分的初始位置i和长度m后,输出的结果在正确结果后面多加上了一堆“烫”和别的东西,
然后在输入例如插入的后一个位置i后,就会显示异常“0xCCCCCC39 处有未经处理的异常(在 StringApp.exe 中): 0xC00001A5: 检测到无效的异常处理程序例程。 (参数: 0x00000003)”。
调试是每次到main函数里的“str.strinsert(s,i,T);”就会弹出异常,如下图,代码也放在下面:
头文件:String.h
#pragma once
class String
{
public:
void strinsert(char *s, int i, char *T);//字符串T;
void strdelete(char *s, int i, int m);//长度m;
int strlen(char *s);
void strprint(char *s);
};
函数的定义:String.cpp
#include "stdafx.h"
#include "String.h"
#include<iostream>
using namespace std;
int String::strlen(char *s)
{
int len=0;
int i=0;
while(s[i]!='\0')
{
len++;
i++;
}
return len;
}
void String::strprint(char *s)
{
int i;
for(i=0;i<strlen(s);i++)
{
cout<<s[i];
}
cout<<endl;
}
void String::strdelete(char *s, int i, int m)
{
if(m>strlen(s))
cout<<"没有字符被删除";
else if((m+i)>=strlen(s))
{
s[i]='\0';
strprint (s);
}
else
{
for(int a=i;a<(strlen(s)-1-(i+m-1));a++)
{
s[a]=s[a+m];
}
strprint (s);
}
}
void String::strinsert(char *s, int i, char *T)//i是字符串s的第i个位置
{
s=strcat(s,T);//将T连接到s的后面
for(int b=0;b<strlen(T);b++)
{
int a;
a=i-strlen(T);
int c;
c=strlen(s)-strlen(T);
int temp;
temp=s[a];
s[a]=s[c];
s[c]=temp;
a++;
c++;
}
cout<<"插入后的字符串为:"<<endl;
strprint(s);
}
main函数:
// StringApp.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "String.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
String str;
char s[]={'0','1','2','3','4','5','6','7','8','9'};
char T[]={'m','a','t','h'};
int i;
int m;
cout<<"请输入删除的起始位置索引号i和删除长度m:";
cin>>i>>m;
str.strdelete(s,i,m);
cout<<"请输入插入位置的后一位索引号i:";
cin>>i;
int a=0;
str.strinsert(s,i,T);//在s[i]前插入字符串T
str.strlen (s);
return 0;
}