① c語言裡面要定義一個字元串數組,數組元素個數不確定,每個元素的長度也不確定,求動態定義的方法
你可以用動態分配內存的方法,
比如你要建立一個字元串數組:
char *str;
str=(char *)malloc(n);
n是變數,可以在確定了變數的值後再用以上代碼分配內存,
而str字元串可以以一般數組的用法使用,比如
*str="hello";的話
str[1]='l';
最後別忘了釋放內存
free(str);
② 在c語言中如何輸入長度不確定的字元串
你可以這樣做:
//文件名: array01.cpp
#include<iostream>
using namespace std;
int main()
{
int len;
cin>>len;
//用指針p指向new動態分配的長度為len*sizeof(int)的內存空間
int *p=new int[len];
...........
delete[] p;
return 0;
}
注意int *p=new int[len];這一句,你不能這樣做:
int p[len];
C++編譯器會報錯說len的大小不能確定,因為用這種形式聲明數組,數組的大小需要在編譯時確定。而且這樣也不行:
int p[]=new int[len];
編譯器會說不能把int*型轉化為int[]型,因為用new開辟了一段內存空間後會返回這段內存的首地址,所以要把這個地址賦給一個指針,所以要用int *p=new int[len];
array01.cpp實現了一個變長的一維數組,但是要養成一個好習慣,就是注意要注銷指針p,使程序釋放用new開辟的內存空間。
不過,如果你能夠知道字元串的最大長度的話,最簡單的辦法就是直接將數組定義為最大長度。
③ C語言怎麼獲取用戶輸入的不定長字元串
辦法很多,舉一二三:
雖說「不定長」,但長度要求不是很大時,可聲明一個足夠大的字元型數組來解決。缺點是空間略有浪費。
聲明兩個字元型指針,先為其一動態分配內存,當輸入滿時為另一個分配更大些的內存,把已經輸入的內容拷貝過去,釋放原來較小的空間;交換指針,繼續輸入,如此不斷。缺點是瞬間需將近兩倍實際需要的空間。
用鏈表,這比較正宗,但需要5位以上的空間。
第2在實際工作中使用過,一個字:爽!
④ c語言中怎樣判斷字元串的長度問題啊
本題的輸出結果是9 我給你總結這樣的題型。1首先你要知道轉義字元,如\n \t \\ \ddd 等這些屬於轉義字元,只佔一個字元串的長度。2.還有就是\101代表ASCII碼的為101的字元'A',記住\376 以內的都佔一個字元串長度,他們都代表ASCII中的某個字母,數字,或亂碼。 希望你看對以後這樣的題都做滿分
⑤ C語言中關於字元數組的長度問題
哎。strlen()是在string.h裡面的,getch()是在conio.h裡面的,不過,我用的是CFree,至於其它的編譯器,我就不知道了。
至於你的問題,當你仔細看看他們的結果,你就會有結論了。
很明顯,strlen(q)的值是一樣的,不同的是p的字元長度
而它們的區別,就在於,它們一個有數組的長度,另一個沒有。
數組q,它的長度是10,所以一開始就會分配10個大小為sizeof(char)的空間,然後,就把a,b,c分別放進從分配的第一個,第二個,第三個空間裡面,然後,剩下的變為0()也就是'\0'。
所以用strlen(q)的時候,就是3
而沒有長度的p,它預設了長度,所以系統就會按你給的元素個數分配,這里p有3個元素,所以就分配3個大小為sizeof(char)的空間,當你用strlen(p)的時候,因為strlen()是以字元串終結符'\0'來判定字元串長度的,所以呢,strlen(p)是一個不確定值。
如果你還沒能理解為什麼是一個不確定值,那就繼續看下去。
在C中,是不會檢測是否越界的,你可以順著數組一直訪問下去,比如你定義一個 int a[10]
你可以訪問a[12],a[13](當然也可以訪問a[-1],a[-100]),只是這些值是不確定的。它訪問的方式,是從數組的起始地址開始,按照數組下標值,進行相對位移(它們所跳過的長度是數組類型的長度,比如上面,是跳過sizeof(int)的長度)。
而strlen()就是從它首地址開始,一個個開始檢測,是否達到'\0『,然後返回長度值。
當你調用strlen()的時候,如果沒有終止符'\0』,它就會越界檢查,直到找到'\0『。
就像 char a[3]={'a','b','c'},它也是一個不確定值。
明白了沒,不懂繼續追問。
寫這么多,真的好累。。。
⑥ c語言 如何接受不定長的字元串
不浪費內存有辦法:
先動態分配(malloc)一個大數組,讀入數據後, 考慮字元串長度,用 realloc 縮小數組。
#include<stdio.h>
#include<stdlib.h>
main(){
char *name;
int n=1000;
int L;
name = (char*) malloc(sizeof(char)*n); // 動態分配,先考慮 1000位元組
scanf("%s",name); // 讀入字元串
L=strlen(name); // 計算長度
if ((n-L) > 10) { // 若 已動態分配的單元數,超出需要的單元有 10個以上
realloc(name,sizeof(char)*(L+1)); //則保留字元串內容不動,並縮小動態分配的數組
n = L+1; // 現在縮小為 n = 字元串長度加1
}
printf("n=%d %s",n,name); // 輸出結果
return 0;
}
⑦ 求解,C語言求字元串的長度,我寫的程序為什麼不對啊
C語音中的變數需要初始化,如果不初始化,初始值是不確定的。
在你的代碼中,長度變數i在使用前沒有初始化,導致變數i的值是不確定的,所以對變數進行++c操作,統計總的字元串得到的長度值是不確定的。
正確的做法是:
int i=0, j=0;
⑧ c語言中關於字元串長度的問題
不,若不在[]填數字,就必須在初始化這個str,在等號右邊寫具體數據,有幾個數據,編譯器就自動在[]中填幾了。所以char str[]{0}這樣寫是錯誤的,要寫成char str[]={'a','b','c'};這樣的形式,編譯器就會認為[]中是3了。另,char型數組還可以char str[]="1234567";這樣來定義,但這時[]中並不是7而是8,原來編譯器把str作為字元串對待了,要在7後自動加一個結束符'\0'。