重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
截断一个数组的一部分相当于取得一个数组的某一个子集数组。
创新互联建站10多年企业网站制作服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站制作及推广,对成都建筑动画等多个方面拥有多年的网站制作经验的网站建设公司。
如果是字符数组,可以使用strncpy函数,根据需要截取需要部分。
strncpy 是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, char *src, int n),把src所指字符串的前n个字节复制到dest所指的数组中,并返回指向dest的指针。
如果是普通数组,使用循环语句,将需要的部分一一赋值即可。
例如:
#includestdio.h
int a[10]={0,1,2,3,4,5,6,7,8,9};//源数组a
int b[10],i;//子集数组b
int main(){
for(i=5;i10;i++) b[i-5]=a[i]; //获得a数组中第6个到第10个数,储存到b当中
return 0;
}
size()函数 求出数组总长度,然后除以12 取余数,如果不为零 那么printf不能平均分cheng12个部分 else for循环 每12个放到一个数组
void * Split(const char * pString ,int length)
{
char * ptr=NULL;
int rows;//一组等宽字符串可以看做二维数组的一行,定义行数
const char *pSrc=pString;//取原地址作为源指针
char *pTag;//目标指针
//分割长度小于等于0,或指针无效时,返回空指针。
if (pString length0 )
{
int len=strlen(pString);
int cols;//列数
rows=len/length;//字符串总长除以列数
if (len%length0)rows++;//如果余数非0,则行数加一
ptr=new char[rows*(length+1)];//创建足够的空间
pTag=ptr;//初始化目标指针
while (*pSrc!='\0')//源指针指向的值如果有效则循环
{
cols=strlen(pSrc);//取原指针开始的字符串长度
if (colslength)cols=length;//如果大于分割长度则修正,否则即为余数,就是最后一行的列数
memcpy(pTag,pSrc,cols);//复制
pTag+=length;//目标指针递增一个列宽(行宽度)
*pTag='\0';//填写结束符
pTag++;//增补一个地址
pSrc+=cols;//源指针递增一个列宽(行宽度)
}
}
return ptr;
}
//主函数
int _tmain(int argc, _TCHAR* argv[])
{
char *str="abcdefghijklmn";
char (*p)[4];
p=(char (*)[4])Split(str,3);
coutp[1]endl;
getchar();
return 0;
}
直接用简单的C++
#include iostream
#include string
#include vector
using namespace std;
//把字符串s按照字符串c进行切分得到vector_v
vectorstring split(const string s, const string c){
vectorstring v;
int pos1=0,pos2;
while((pos2=s.find(c,pos1))!=-1){
v.push_back(s.substr(pos1, pos2-pos1));
pos1 = pos2 + c.size();
}
if(pos1 != s.length())
v.push_back(s.substr(pos1));
return v;
}
int main()
{
string input="张三$|男$|济南$|大专学历$|";
vectorstring myArray=split(input,"$|");
for(int i=0;imyArray.size();i++){
coutmyArray[i]endl;
}
}
/*
张三
男
济南
大专学历
*/
/*如何把上面这个转置3*3 二维数组程序转换成俩个子函数*/
#includestdio.h
int arr[3][3];//将数组arr定义成一个全局变量
int main()
{
int sr();
int sc();
sr();//输入二维数组
sc();//输出转置后的二维数组
}
int sr(){
int i,j;
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return 0;
}
int sc(){
int i,j;
for(i=0;i3;i++)
{
for(j=0;j3;j++)
printf("%d ",arr[j][i]);
printf("\n");
}
return 0;
}
运行结果:
严格意义上,你的这个转置并没有改变arr数组原来的值,换句话说,执行完sc后,arr的值并没有改变成转置数组。
可以利用中间数组来完成数组转置,修改如下:
如何把上面这个转置3*3 二维数组程序转换成俩个子函数*/
#includestdio.h
int arr[3][3];//将数组arr定义成一个全局变量
int main()
{
int sr();
int sc();
void printfarr(int arr[3][3]);
sr();//输入二维数组
sc();//转置
printfarr(arr);//输出数组
return 0;
}
int sr(){
int i,j;
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return 0;
}
int sc(){
int i,j;
int br[3][3];
for(i=0;i3;i++)
for(j=0;j3;j++)
br[i][j]=arr[j][i];//转置后的数组暂放在数组br中
for(i=0;i3;i++)
for(j=0;j3;j++)
arr[i][j]=br[i][j];//将转置后的数组赋值给arr;
return 0;
}
void printfarr(int arr[3][3]){//输出数组
int i,j;
for(i=0;i3;i++)
{
for(j=0;j3;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
}
结果和上边一样。
你只能输入字符,不能输入字符串。因为C没有字符串,C的字符串就是一堆字符后面跟着一个'\0',而scanf是没办法在后面加上'\0'的,所以得不到想要的结果。如果想得到结果只能用while(c=getchar()){ }然后在结束的时候自己加'\0'
再有就是i和n没有初始化的问题了。不过即使赋了值,也由于上面的原因,能够运行,但得不到你想要的结果。