c语言怎么把字符串转数组,【转】C语言 字符数组与字符串
在C語言編程中,當(dāng)我們聲明一個(gè)字符串?dāng)?shù)組的時(shí)候,常常需要把它初始化為空串。總結(jié)起來有以下三種方式:
(1) char str[10]=”“;
(2) char str[10]={”};
(3) char str[10]; str[0]=”;
第(1)(2)種方式是將str數(shù)組的所有元素都初始化為”,而第(3)種方式是只將str數(shù)組的第一個(gè)元素初始化為”。如果數(shù)組的size非常大,那么前兩種方式將會(huì)造成很大的開銷。所以,除非必要(即我們需要將str數(shù)組的所有元素都初始化為0的情況),我們都應(yīng)該選用第(3)種方式來初始化字符串?dāng)?shù)組。
================
數(shù)組可以初始化,即在定義時(shí),使它包含程序馬上能使用的值。
例如,下面的代碼定義了一個(gè)全局?jǐn)?shù)組,并用一組Fibonacci數(shù)初始化:
int iArray[10]={1,1,2,3,5,8,13,21,34,55); //初始化
void main(){
//…
}
初始化數(shù)組的值的個(gè)數(shù)不能多于數(shù)組元素個(gè)數(shù),初始化數(shù)組的值也不能通過跳過逗號(hào)的方式來省略,這在C中是允許的,但在C++中不允許。
例如,下面的代碼對(duì)數(shù)組進(jìn)行初始化是錯(cuò)誤的:
int arrayl[5]={1,2,3,4,5,6}; //error: 初始化值個(gè)數(shù)多于數(shù)組元素個(gè)數(shù)
int array2[5]={1,,2,3,4}; //error:初始化值不能省略
int array3[5]={1,2,3,}; //error:初始化值不能省略
int array4[5]={}; //error:語法格式錯(cuò)誤
void main(){
//…
}
初始化值的個(gè)數(shù)可少于數(shù)組元素個(gè)數(shù)。當(dāng)初始化值的個(gè)數(shù)少于數(shù)組元素個(gè)數(shù)時(shí),前面的按序初始化相應(yīng)值, 后面的初始化為0(全局或靜態(tài)數(shù)組)或?yàn)椴淮_定值(局部數(shù)組)。
例如,下面的程序?qū)?shù)組進(jìn)行初始化:
//*********************
//** ch7_2.cpp **
//*********************
#include
int array1[5]={1,2,3};
static int array2[5]={1};
void main()
{
int arr1[5]={2};
static int arr2[5]={1,2};
int n;
cout <
for(n=0; n<5; n++)
cout <
cout <
for(n=0; n<5; n++)
cout <
cout <
for(n=0; n<5; n++)
cout <
cout <
for(n=0; n<5; n++)
cout <
cout <
}
運(yùn)行結(jié)果為:
global:
l 2 3 0 0
global static:
1 0 0 0 0
local:
2 23567 23567 23567 23567
local static:
1 2 0 0 0
例中,全局?jǐn)?shù)組和全局靜態(tài)數(shù)組的初始化是在主函數(shù)運(yùn)行之前完成的,而局部數(shù)組和局部靜態(tài)數(shù)組的初始化是在進(jìn)入主函數(shù)后完成的。
全局?jǐn)?shù)組arrayl[5]對(duì)于初始化表的值按序初始化為1,2,3,還有兩個(gè)元素的值則按默認(rèn)初始化為0。
全局靜態(tài)數(shù)組array2[5]與全局?jǐn)?shù)組的初始化情況一樣,初始化表值(1)表示第1個(gè)元素的值,而不是指全部數(shù)組元素都為1。
局部數(shù)組arrl[5]根據(jù)初始化表值的內(nèi)容按序初始化, 由于初始化表值只有1個(gè),所以還有4個(gè)元素的值為不確定。在這里均為數(shù)值23567。
局部靜態(tài)數(shù)組arr2[5]先根據(jù)初始化表按序初始化,其余3個(gè)數(shù)組元素的值默認(rèn)初始化為0。
2.初始化字符數(shù)組
初始化字符數(shù)組有兩種方法,一種是:
char array[10]={“hello”};
另一種是:
char array[10]={‘h’,’e’,’l’,’l’,”};
第一種方法用途較廣,初始化時(shí),系統(tǒng)自動(dòng)在數(shù)組沒有填值的位置用,”補(bǔ)上。另外, 這種方法中的花括號(hào)可以省略,即能表示成:
char array[10]=”hello”;
第二種方法一次一個(gè)元素地初始化數(shù)組,如同初始化整型數(shù)組。這種方法通常用于輸入不容易在鍵盤上生成的那些不可見字符。
例如,下面的代碼中初始化值為若干制表符:
char chArray[5]={‘t’,’t’,’t’,’t’,”);
這里不要忘記為最后的,”分配空間。如果要初始化一個(gè)字符串”hello”,那為它定義的數(shù)組至少有6個(gè)數(shù)組元素。
例如,下面的代碼給數(shù)組初始化,但會(huì)引起不可預(yù)料的錯(cuò)誤:
char array[5]=”hello”;
該代碼不會(huì)引起編譯錯(cuò)誤,但由于改寫了數(shù)組空間以外的內(nèi)存單元,所以是危險(xiǎn)的。
3.省略數(shù)組大小
有初始化的數(shù)組定義可以省略方括號(hào)中的數(shù)組大小。
例如,下面的代碼中數(shù)組定義為5個(gè)元素:
int a[]={2,4,6,8,10};
編譯時(shí)必須知道數(shù)組的大小。通常,聲明數(shù)組時(shí)方括號(hào)內(nèi)的數(shù)字決定了數(shù)組的大小。有初始化的數(shù)組定義又省略方括號(hào)中的數(shù)組大小時(shí),編譯器統(tǒng)計(jì)花括號(hào)之間的元素個(gè)數(shù),以求出數(shù)組的大小。
例如,下面的代碼產(chǎn)生相同的結(jié)果:
static int a1[5]={1,2,3,4,5};
static int a2[]={1,2,3,4,5};
讓編譯器得出初始化數(shù)組的大小有幾個(gè)好處。它常常用于初始化一個(gè)元素個(gè)數(shù)在初始化中確定的數(shù)組,提供程序員修改元素個(gè)數(shù)的機(jī)會(huì)。
在沒有規(guī)定數(shù)組大小的情況下,怎么知道數(shù)組的大小呢? sizeof操作解決了該問題。 例如,下面的代碼用sizeof確定數(shù)組的大小:
//*********************
//** ch7_3.cpp **
//*********************
#include
void main()
{
static int a[]={1,2,4,8,16};
for(int i=0; i
cout <
cout <
}
運(yùn)行結(jié)果為:
1 2 4 8 16
sizeof操作使for循環(huán)自動(dòng)調(diào)整次數(shù)。如果要從初始化a數(shù)組的集合中增刪元素,只需重新編譯即可,其他內(nèi)容無須更動(dòng)。
每個(gè)數(shù)組所占的存儲(chǔ)量都可以用sizeof操作來確定! sizeof返回指定項(xiàng)的字節(jié)數(shù)。sizeof常用于數(shù)組,使代碼可在16位機(jī)器和32位機(jī)器之間移植:
對(duì)于字符串的初始化,要注意數(shù)組實(shí)際分配的空間大小是字符串中字符個(gè)數(shù)加上末尾的,”,結(jié)束符。
例如,下面的代碼定義一個(gè)字符數(shù)組:
//*********************
//** ch7_4.cpp **
//*********************
#include
void main()
{
char ch[]=”how are you”;
cout <
cout <
}
運(yùn)行結(jié)果為:
size of array:12
size of string:ll
例中,數(shù)組大小為12,而字符串長(zhǎng)度為11。
省略數(shù)組大小只能在有初始化的數(shù)組定義中。
例如,下面的代碼將產(chǎn)生一個(gè)編譯錯(cuò)誤:
int a[];//error:沒有確定數(shù)組大小
在定義數(shù)組的場(chǎng)合,無論如何,編譯器必須知道數(shù)組的大小。
c語言字符數(shù)組與字符串的使用詳解
轉(zhuǎn)自:http://www.jb51.net/article/37456.htm 1.字符數(shù)組的定義與初始化字符數(shù)組的初始化,最容易理解的方式就是逐個(gè)字符賦給數(shù)組中各元素.char str[10]={ ...
[c語言]字符數(shù)組、字符串定義
C語言中字符串通常用字符指針和字符數(shù)組來定義: char* pS="abcdef"; char s[]="abcdef"; 這兩種方式都會(huì)在結(jié)尾為字符串隱式補(bǔ)結(jié) ...
C語言字符數(shù)組和字符串
用來存放字符的數(shù)組稱為字符數(shù)組,例如: char a[10]; //一維字符數(shù)組 char b[5][10]; //二維字符數(shù)組 char c[20]={'c', ' ', 'p', 'r', 'o' ...
C語言字符數(shù)組與字符串
研究幾個(gè)案例: 輸出圖案: #include void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...
[日常] C語言中的字符數(shù)組和字符串
c語言字符數(shù)組和字符串:1.存放字符的數(shù)組稱為字符數(shù)組 char str[]2.'\0'也被稱為字符串結(jié)束標(biāo)志3.由" "包圍的字符串會(huì)自動(dòng)在末尾添加'\0'4.逐個(gè)字符地給數(shù)組賦 ...
C語言中字符數(shù)組和字符串指針分析
這幾天搞Unix上的C程序,里面用到了很多字符數(shù)組和字符串指針,我記得在學(xué)完C語言后相當(dāng)一段時(shí)間里,對(duì)指針這個(gè)東西還是模模糊糊,后來工作也沒怎么 用到過C,雖然網(wǎng)上這類的文章也有很多,還是決定自己在這 ...
c語言中的字符數(shù)組與字符串
1.字符數(shù)組的定義與初始化 字符數(shù)組的初始化,最容易理解的方式就是逐個(gè)字符賦給數(shù)組中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y ...
C語言基礎(chǔ)復(fù)習(xí):字符,字符數(shù)組,字符串,字符指針
1. 概述2. 字符2.1 字符定義和大小2.2 字符的輸入和輸出2.3 字符的計(jì)算3. 字符數(shù)組3.1 字符數(shù)組的定義和大小3.2 字符數(shù)組的輸入和輸出3.3 字符數(shù)組的計(jì)算4. 字符串4.1 字符 ...
C語言中整形數(shù)組、字符數(shù)組、字符串的區(qū)別
一. 第一 整型數(shù)組的存放,數(shù)組最后是不加'\0'的,字符串會(huì)自動(dòng)加上,因此存放字符的時(shí)候數(shù)組的大小要比實(shí)際字符的多一個(gè) 第二 整型數(shù)組 每一個(gè)單元是4個(gè)字節(jié)的,字符串是一個(gè)一個(gè)字符存放的,每個(gè)字符占 ...
隨機(jī)推薦
修改Glassfish默認(rèn)密碼,并允許遠(yuǎn)程登錄
修改默認(rèn)密碼 1.打開命令提示窗口,進(jìn)入 glassfish/bin 目錄: 2.輸入命令 asadmin 進(jìn)入管理模式: 接著輸入: change-admin-password 注意默認(rèn)密碼為空,要 ...
Atitit 語音識(shí)別的技術(shù)原理
Atitit 語音識(shí)別的技術(shù)原理 1.1. 語音識(shí)別技術(shù),也被稱為自動(dòng)語音識(shí)別Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大詞匯量語音識(shí)別系統(tǒng)多 ...
【轉(zhuǎn)】JavaScript面向?qū)ο?/p>
http://www.cnblogs.com/dolphinX/p/4385862.html 理解對(duì)象 對(duì)象這個(gè)詞如雷貫耳,同樣出名的一句話:XXX語言中一切皆為對(duì)象! 對(duì)象究竟是什么?什么叫面向?qū)ο?...
fluent nhibernate 初體驗(yàn)
離開.net框架兩年時(shí)間,發(fā)展的很快呀.原先自我感覺良好到以為只差一個(gè)MVP的考核什么的,現(xiàn)在覺得真的差好遠(yuǎn)了. 呵呵,廢話就不多說了.這次花了兩天時(shí)間才拿下fluent nhibernate的fir ...
Linux命令之ssh
一. 配置ssh 1. 命令 ssh-keygen [選項(xiàng)] 2. 說明 用于為“ssh”生成.管理和轉(zhuǎn)換認(rèn)證密鑰,它支持RSA和DSA兩種認(rèn)證密鑰 3. 選項(xiàng) -C:添加注釋 -f:指定用來保存密鑰 ...
Windows系統(tǒng)基本概念
windows API:被文檔化的可以調(diào)用的子例程,如CreateProcess 原生的系統(tǒng)服務(wù)(執(zhí)行體系統(tǒng)服務(wù)):未被文檔化的.可以再用戶模式下調(diào)用的底層服務(wù),如NtCreateProcess 內(nèi)核 ...
通過expdp/impdp進(jìn)行oracle數(shù)據(jù)庫的備份恢復(fù)詳細(xì)指導(dǎo)
假定導(dǎo)出oracle數(shù)據(jù)庫home目錄為/opt/oracle,數(shù)據(jù)庫用戶為exp_user/test,導(dǎo)入用戶為imp_user/test,給出如下樣例,具體使用時(shí)根據(jù)實(shí)際情況修改路徑及用戶名/密碼 ...
easyui 時(shí)間段校驗(yàn),開始時(shí)間小于結(jié)束時(shí)間,并且時(shí)間間隔不能超過30天
//對(duì)easyui datetimebox的驗(yàn)證,開始時(shí)間要小于結(jié)束時(shí)間function validateDateTime(beginTimeId,endTimeId,whichTimeId){ co ...
VSCode插件開發(fā)全攻略(一)概覽
文章索引 VSCode插件開發(fā)全攻略(一)概覽 VSCode插件開發(fā)全攻略(二)HelloWord VSCode插件開發(fā)全攻略(三)package.json詳解 VSCode插件開發(fā)全攻略(四)命令. ...
使用FormData格式在前后端傳遞數(shù)據(jù)
為什么一定要使用formdata格式……很大原因是因?yàn)楫?dāng)時(shí)我犯蠢…… 前端肯定是JS了,具體不寫了,使用Postman測(cè)試,后端語言是Java,框架Spring Boot,使用IntelliJ IDE ...
總結(jié)
以上是生活随笔為你收集整理的c语言怎么把字符串转数组,【转】C语言 字符数组与字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AVPlayer添加播放进度监听
- 下一篇: 经典C语言程序设计100例