c語言任意長度數組
『壹』 c語言如何輸入任意長度的字元串數組
方法:
1)逐個元素進行賦初值。例如:
char
a[12]={'g','o','o','d','
','m','o','r','n','i','n','g'};
採用這種方式對字元數組初始化,可以不包括結束標志,這是合法的。但在對數組整體輸出時系統無法判斷字元串是否結束,輸出結果會存在問題。因此通常人為的加上『\0』。上例做如下改動更合理:
char
a[13]={'g','o','o','d','
','m','o','r','n','i','n','g','\0'};
2)用字元串常量來初始化字元數組:
char
a[]="good
morning";或
char
a[]={"good
morning"};
採用這種方式初始化字元數組,可以不指定數組長度,但數組的實際長度比字元串常量的長度多1,因為系統會在最後添加字元串結束標志『\0』;若指定了數組的長度,如果字元串常量的長度大於數組長度會出錯,如果小於數組長度,系統會將未賦值的元素全部充成『\0』。
『貳』 c語言,怎麼寫一個任意長度(1000位以內)的整數用數組的話要怎麼求出它的長度呢
直接使用strlen就可以了,比如下面
#include<stdio.h>
#include<string.h>
intmain()
{
charstr[1010];
gets(str);
printf("%d ",strlen(str));
return0;
}
『叄』 C語言主函數定義一個任意長度的一維數組,主函數輸入數組元素(已排序),分別調用函數
#include #define N 10 /*函數前置聲明*/ int sortArr(int *p,int n); int printArr(int * p, int n); /*冒泡排序*/ int sortArr(int *p,int n) { int i, j, t; for(i = 0; i < n; i++) { for(j = 0; j p[j+1]) { t = p[j]; p[j] = p[j+1]; p[j+1] = t; } } } return 0; } /*列印數組*/ int printArr(int * p, int n) { int i; for(i=0; i
『肆』 C語言,對任意長度的數組進行冒泡排序,我的代碼哪裡有問題為什麼我輸入數組第一個元素,第一個數會沒
數據輸入方式錯誤,以一個整數緊接著一個回車結束輸入過程的初步解決方法參考如下:
將以上代碼5至8行替換為
char ch;
i=0;
while(1){
scanf("%d%c",&t,&ch);
a[i++]=t;
if(i>=100) break;//防止越界
if(ch=='\n') break;
}
『伍』 C語言 兩個任意長度一維數組的加法
#include<stdio.h>
#include<string.h>
char s[100001];
int a[100001],b[100001],c[100001];
int main(){
long i,j,k,m,n;
long alen,blen,clen;
gets(s);
alen=strlen(s);
for(i=alen-1;i>=0;i--)
a[alen-i]=s[i]-'0';
gets(s);
blen=strlen(s);
for(i=blen-1;i>=0;i--)
b[blen-i]=s[i]-'0';
if(alen>blen)
clen=alen;
else
clen=blen;
for(i=1;i<=clen;i++)
c[i]=a[i]+b[i];
for(i=1;i<=clen;i++)
if(c[i]>9){
c[i+1]++;
c[i]-=10;
if(i==clen)
clen++;
}
for(i=clen;i>=1;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}
『陸』 怎麼用C語言定義一個無限長的數組
C語言支持定義一個不顯式定義長度的數組,即通過初始化數據來分配數組長度。
比如int a[] = {1,2,3,4,5}; 數組a的長度沒有顯式給出,由於有5個初始化數據,所以分配空間長度為5個int型。
但是無論如何定義,數組的長度都是固定的,在定義的時候就已經分配好空間,從這個角度上C語言無法定義無限長的數組。但很多實際應用中又事先無法確定數組的長度,對於這類情況,一般有兩種方法可以使用。
1 由malloc和realloc兩個函數,分配動態空間,隨時按需改變數組的最大長度。
通過下面例子來理解該方法:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intsize=100;//最初為100個元素空間。
int*a=NULL;
inti=0;
a=malloc(sizeof(int)*size);
if(a==NULL)return-1;
while(scanf("%d",a+i)==1)//循環向a中輸入數據,直到輸入非數值字元為止
{
i++;
if(i==size)//數組空間不足
{
size*=2;//將數組空間擴大二倍,也可以改用size+=100;之類的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空間
if(a==NULL)
{
return-1;//這種情況下運行載體(如PC)內存不足以提供,中斷程序。
}
}
}
if(a)free(a);//對申請的內存進行釋放。
return0;
}
從以上程序可以看到,這種方式的原理就是每當數組空間不足時,利用函數realloc分配一段新的內存空間以增大數組長度。 直到占滿所有剩餘空間。
如果到占滿所有空間還是無法存下數據,那麼是硬體無法支持了。
所以這種方法可以做到軟體意義上的無限大數組空間。
但是這種方法代碼量比較大,而且需要頻繁的進行內存的分配,如果實現知道數據的最大可能規模,那麼可以用另一個方法。
2 事先知道數據的最大規模,比如統計一個班的分數時,一個班最多不超過百人,那麼可以直接定義一個長度為100的數組,或者保險起見,定義一個長度為1000的數組,並對其操作。這樣在操作范圍內,這個就是一個「無限長」的數組了。
『柒』 C語言怎麼定義一個二維數組可以使每行的輸入長度任意
1、使用動態數組可以實現變長度數組。建動態數組,其他就像數組一樣使用就行了。
2、常式:
introw=0;//函數
intcol=0;//列數
inti;
int**arr=NULL;//下面假設存儲的數據類型為int
printf(「請輸入二維數組的行數和列數:」);
scanf("%d%d",&row,&col);
//要不要加判斷輸入是否合法你自己決定,這里就不加,
arr=(int**)malloc(sizeof(int*)*row);//arr在這里可以看出成數組,數組的每個成員都是指向int類型的指針,這樣每個指針指向的代表一行,共row行
for(i=0;i<row;i++)//為每行申請空間
{
arr[i]=(int*)malloc(sizeof(int)*col);//每一行有col列
}
之後就可以用a[i][j]的形式訪問二維數組了
『捌』 c語言中如何自定義數組長度
動態分配的數組可以自定義數組的長度,示例如下:
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
int
main()
{
printf("輸入要分配的內存大小:");
int
size;
scanf("%d",
&size);
//輸入自定義的數組長度
int
*pstart
=
(int
*)malloc(sizeof(int)
*size);
if
(pstart==0)
{
printf("不能分配內存\n");
return
0;
}
memset(pstart,
0x00,
sizeof(int)
*
size);
int
inx;
for
(inx=0;
inx!=size;
++inx)
pstart[inx]
=
inx;
for
(inx=0;
inx!=size;
++inx)
printf("%d\t",
pstart[inx]);
printf("\n");
return
0;
}
『玖』 C語言,這題,看圖,怎麼輸入任意長度的整型數組啊字元數組還可以當字元串,整型的呢
「任意長度」實際上是做不到的,即使所用的軟體平台沒有限制,硬體環境也不允許。所以「任意長度」應當理解為在一個很大的空間之內沒有限制地輸入字元串而不用事先確定長度。鑒於這種理解,可以定義一個輸入函數,先動態申請一個較大的空間,直接向其內輸入字元串;輸入完畢後檢測其長度,再按實際需要申請一個合適大小的空間,把剛才輸入的字元串拷貝到這個合適大小的空間里,再把原先申請的大空間釋放。舉例代碼如下: