A. c語言 字元串 是什麼
寫多了 Java 代碼,對 String 類 很是喜愛,可惜經典的 C 語言沒有。。。最近在做程序過程中,發現對C語言字元串的處理很模糊,一會兒用數組,一會兒用指針,一會兒又引入 string.h。。。於是決定總結一下C語言中字元串的處理,一則作為筆記,二則作為技術交流和大家分享。
1.字元串字面量(字元串常量,在C標准中稱為,字元串字面量)
如何存儲字元串字面量
從本質上而言,C語言把字元串字面量作為字元數組來處理。當C語言編譯器在程序中遇到長度為n的字元串字面量時,它會為字元串字面量分配長度為n+1的內存空間,在末尾增加一個額外的字元——空字元(\0)。
字元串字面量的操作
通常情況下可以在任何C語言允許使用 char * 指針的地方使用字元串字面量。如:
char *p;p = "abc";這個賦值操作不是復制 "abc" 中的字元,而僅僅是使 p 指向字元串的第一個字元。
2.字元串變數
一些編程語言為聲明字元串提供了特殊的 string 類型。C語言採取了不同的方式:只要保證字元串是以空字元串結尾的,任何一維的字元數組都可以用來存儲字元串。如果編寫自己的字元串處理函數,請千萬注意要正確地處理空字元。
假設需要變數用來存儲最多80個字元的字元串。既然字元串會在末尾處需要空字元,那麼要聲明的變數是含有81個字元的數組。
#define STR_LEN 80/* 慣用法 */char str[STR_LEN + 1];對宏加一的這種方法是C程序員常用的方式。
初始化字元串變數
char date1[8] = "June 14";date1: | J | u | n | e | | 1 | 4 | \0 |
char date2[9] = "June 14";date2: | J | u | n | e | | 1 | 4 | \0 | \0 |
大體上來說,這種行為與C語言處理數組初始化的方法一致。
字元串變數的聲明可以忽略它的長度。這種情況下,編譯器會自動計算長度:
char date3[] = "June 14";編譯器為date3分配8個字元的空間。
字元數組與字元指針
一起來比較一下下面兩個聲明:
char date[] = "June 14";它聲明date是個字元數組。和這個聲明相似的是下面這個聲明:
char *date = "June 14";它聲明date是個指向字元串字面量的指針。
[注意],不能錯誤地認為上面兩種date可以互換。兩者之間有著顯著的差異:
(1) 在聲明為數組時,就像任意數組元素一樣,可以修改存儲在date中的字元。在聲明為指針時,date指向字元串字面量。
(2) 在聲明為數組時,date是數組名。在聲明為指針時,date是變數,這個變數可以在程序執行期間指向其他字元串。
如果需要可以修改的字元串,那麼就要建立字元數組來存儲字元串。這時聲明指針變數是不夠的。下面的聲明使編譯器為指針變數分配了足夠的內存空間:
char *p;可惜的是,它不為字元串分配空間。在使用p作為字元串之前,必須把p指向字元串數組。一種可能是把p指向已經存在的字元串變數:
char str[STR_LEN + 1], *p;p = str;
現在p指向了str的第一個字元,所以可以把p作為字元串使用了。
B. C語言中什麼是字元,什麼是字元串啊,謝謝
C語言中單引號的是字元,雙引號的是字元串。
1、字元指類字形單位或符號,包括字母、數字、運算符號、標點符號和其他符號,以及一些功能性符號。字元在計算機內存放,應規定相應的代表字元的二進制代碼。代碼的選用要與有關外圍設備的規格取得一致。
2、字元串主要用於編程,概念說明、函數解釋、用法詳述見正文,這里補充一點:字元串在存儲上類似字元數組,所以它每一位的單個元素都是可以提取的。
它是編程語言中表示文本的數據類型。在程序設計中,字元串(string)為符號或數值的一個連續序列,如符號串(一串字元)或二進制數字串(一串二進制數字)。
(2)c語言動態字元串是什麼擴展閱讀
C語言字元串的使用
用來存放字元的數組稱為字元數組,例如:
charc[10];
字元數組也可以是二維或多維數組。例如:
charc[5][10];
字元數組也允許在定義時進行初始化,例如:
charc[10]={'c','','p','r','o','g','r','a','m'};//c[9]未賦值,所以為默認值』 』
當對全體元素賦初值時也可以省去長度說明。例如:
charc[]={'c','','p','r','o','g','r','a','m'};
這時c數組的長度自動定為9。
字元數組和普通數組一樣,也是通過下標引用各個元素。
C. 什麼是字元串在C語言中.
C語言的字元串是內存中以'\0'結尾的char型數組
例如說
char
a[5]
=
"abc"
內存中是abc'\0'是字元串,可以通過puts輸出
char
b[5]
=
{'a','b','c','\0'};內存中是abc'\0'是字元串,可以通過puts輸出
char
b[5]
=
{'a','b','c'};內存中是abc不是字元串,不能通過puts輸出
所以說字元串是內存中以'\0'結尾的char型數組
D. C語言動態復制字元串
1.*p = '\0';不能刪除; C語言中char類型數組最後一個為'\0',表示字元串的結束
關於2:p和addr指向的內容已經不同,因為p有++操作!
E. c語言讀取動態字元串問題
用鏈表可以滿足, 輸入一個字元, 分配一個內存空間
讀取字元就簡單了
其它方式,如數組,字元串,不現實, 它們要求分配一段連續的內存空間, 因為不知道輸入的字元串有多長, 內存中不一定有這么長的連續空間
F. c語言 動態字元串數組
首先你的開辟數組內存過大,建議使用鏈表進行存儲或者使用vector模板!上面是動態開辟二維數組的方式,你參考一下吧
G. 如何用C語言實現動態的字元串數組
分成取數字與取非數字2個函數較簡單。get_v()取數字, get_o()取非數字。
#include <stdio.h>
char *get_v(char *a, char *b){
int i=0;
while( a[i]>='0' && a[i]<='9') {b[i]=a[i];i++;};
b[i]='\0';
strcpy(a,a+i);
return b;
}
char *get_o(char *a, char *b){
int i=0;
while( a[i]<'0' || a[i]>'9') {b[i]=a[i];i++;};
b[i]='\0';
strcpy(a,a+i);
return b;
}
int main()
{
char s[]="1234+4*5";
char b[10];
while(strlen(s)>=1){
get_v(s, b);
printf("%s\n",b);
if (strlen(s)<=0)break;
get_o(s, b);
printf("%s\n",b);
};
return 0;
}
H. 動態輸入字元串是什麼意思,C語言
(1)
c語言中沒有
字元串相減
運算。
(2)
c語言中
有
單個字元
相減
運算。
例如,把字元串"1234"里的各個數字字元轉成整型,存入整型數組:
int
i,x[4];
char
str[]="1234";
for
(i=0;i<4;i++)
x[i]
=
str[i]
-
'0';
例如,
把字元串中字母,小寫變大寫:
char
str[]="abcxyz";
int
i;
for
(i=0;i
if
(str[i]
>='a'
&&
str[i]
<='z')
str[i]
=
str[i]
-'a'
+
'a';
(3)
字元串大小比較
用
strcmp()
或
strncmp()
函數
例如:
if
(strcmp(a,b)
==
0)
printf("
string
a
and
b
are
the
same\n");
if
(strcmp(a,b)
>
0)
printf("
string
a
is
bigger
than
b\n");
I. C語言中的字元串是什麼
字元就是一類成為
cahr的數據
說的簡單點,字元串
就是一種數組,char類型的數組,
但由於有些自帶函數可以直接用來操作字元串,所以在用法上與數組有略微差別