将数组S2覆盖到数组S1的第 i 个位置之后···请高手帮帮忙好吗?谢谢了···急急急急急急急急急急急急急急急急急急急急i
// 覆盖.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
#include "stdlib.h"
#include "string.h"
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN +1] ;
SString S1;
SString S2;
SString T;
void creatshuzu(SString &S)//建立数组
{
// S=(SString*)malloc((MAXSTRLEN +1)*sizeof(SString));
cout<<"请输入字符串数组中的数据:"<<endl;
char ch;
int i=0;
while( (ch=getchar())!='\n')
{
++i;
S[i]=ch;
}
S[0]=i; // s[0] 中存放字符串的个数
}
void fugai( int i)
{
T[ S1[0]+S2[0] ];
if( i+S2[0]<=MAXSTRLEN) //将S2覆盖到 S1 的第i个位置之后中
{
int j=1;
for(i;i<=S1[0];i++)
{
S1[i]=S2[j];
j++;
}
}
else
{
for(int k=1;k<=i-1;k++)
T[k]=S1[k];
for(int p=1;p<=S2[0];p++)
T[i-1+p]=S2[p];
}
T[0]=i-1+S2[0];
S1=T;/////////////////////////////////////
free(T);
}
void shuchu()//将数组中数据输出
{
int i;
for(i=1;i<=S1[0];i++)
cout<<S1[i];
}
int main(int argc, char* argv[])
{
creatshuzu(S1);
creatshuzu(S2);
cout<<"请输入一个整数作为您要覆盖的位置:"<<endl;
int i;
cin>>i;
fugai(i);
shuchu();
return 0;
}
[解决办法]
代码格式太乱了,另外,搂住还有很多基础知识需要再复习一下!帮你整理代码格式的同时,对几个原则性的错误进行了注释。
#include "stdafx.h " #include "stdio.h " #include "iostream.h " #include "stdlib.h " #include "string.h " #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1] ; SString S1; //定义了三个全局变量的数组 SString S2; SString T; void creatshuzu(SString &S)//建立数组 { // S=(SString*)malloc((MAXSTRLEN +1)*sizeof(SString)); cout << "请输入字符串数组中的数据: " <<endl; char ch; int i=0; while((ch=getchar())!= '\n') { ++i; S[i]=ch; } S[0]=i; // (s[0]中存放字符串的个数) ,如果以字符形式输出s[0],肯定是乱码 } void fugai(int i) { T[ S1[0]+S2[0] ]; //在全局变量中已经定义了T[],其空间早已分配好了,此处知识定义了一个局部变量而已,不可能改变全局变量T[]的空间 if( i+S2[0] <=MAXSTRLEN) //将S2覆盖到 S1 的第i个位置之后中 { int j=1; for(i;i <=S1[0];i++) { S1[i]=S2[j]; j++; } } else //这后面的语句试图另外扩展一个空间,然后将空间首地址付给S1,别忘了S1是数组名(表示地址常量),不可能被改变。 { for(int k=1;k <=i-1;k++) T[k]=S1[k]; for(int p=1;p <=S2[0];p++) T[i-1+p]=S2[p]; } T[0]=i-1+S2[0]; S1=T; //此处程序将崩溃 free(T); //free()仅仅针对动态分配在堆上的空间进行释放(与malloc对应),数组空间分配在栈上或静态数据区,free()对数组操作无效} void shuchu()//将数组中数据输出 { int i; for(i=1;i <=S1[0];i++) cout < <S1[i]; } int main(int argc, char* argv[]) { creatshuzu(S1); creatshuzu(S2); cout << "请输入一个整数作为您要覆盖的位置: " <<endl; int i; cin>> i; fugai(i); shuchu(); return 0; }
[解决办法]
记住:当你找工作的时候。如果函数名是用拼音写的,人家直接让你走人。。。
还有以后把问题表述清楚。。貌似你还开了一个帖子。。。
[解决办法]
代码:
#include "stdafx.h " #include "stdio.h " #include "iostream.h " #include "stdlib.h " #include "string.h " #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1] ; SString S1; SString S2; SString T; void creatshuzu(SString &S)//建立数组 { // S=(SString*)malloc((MAXSTRLEN +1)*sizeof(SString)); cout << "请输入字符串数组中的数据: " <<endl; char ch; int i=0; while((ch=getchar())!= '\n') { ++i; S[i]=ch; } S[0]=i; // s[0] 中存放字符串的个数 }void fugai(int i){ T[ S1[0]+S2[0] ]; if( i+S2[0] <=MAXSTRLEN) //将S2覆盖到 S1 的第i个位置之后中 { int j=1; for(i;i <=S1[0];i++) { S1[i]=S2[j]; j++; } } else { for(int k=1;k <=i-1;k++) T[k]=S1[k]; for(int p=1;p <=S2[0];p++) T[i-1+p]=S2[p]; } T[0]=i-1+S2[0]; S1=T; free(T); } void shuchu()//将数组中数据输出{ int i; for(i=1;i <=S1[0];i++) cout < <S1[i]; } int main(int argc, char* argv[]) { creatshuzu(S1); creatshuzu(S2); cout << "请输入一个整数作为您要覆盖的位置: " <<endl; int i; cin>> i; fugai(i); shuchu(); return 0; }
[解决办法]
到这来讨论吧
菜鸟学编程之C++/MFC: QQ群 41977413 C++/MFC编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加
菜鸟学编程之C/C# : QQ群 41976716 C/C#编程开发技术,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加
菜鸟学编程之VB/ VBA : QQ群 20772662 VB/ VBA编程开发技术群,有问题讨论问题,无事适当吹水;一起讨论学习,习惯潜水者勿加