當前位置:首頁 » 編程語言 » c語言字元串總結
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言字元串總結

發布時間: 2022-05-23 19:27:36

c語言的字元數組和字元串的區別

1、長度不同:

對於字元數組,其長度是固定的,其中任何一個數組元素都可以為 null 字元。因此,字元數組不一定是字元串。字元串的結尾是以null 字元結尾,所以長度會有所不同。

2、結尾不同

對於字元串,它必須以 null 字元(也就是'',用十六進製表示為 0x00)結尾,其後的字元不屬於該字元串。

字元串一定是字元數組,它是最後一個字元為 null 字元的字元數組。字元數組則不會自動增加任何東西。

3、對於字元串,可以直接使用 printf 的 %s 列印其內容;而對字元數組,很顯然使用 printf 的 %s 列印其內容是不合適的。

(1)c語言字元串總結擴展閱讀:

字元串函數應用

1.連接運算 concat(s1,s2,s3…sn) 相當於s1+s2+s3+…+sn.

例:concat('11','aa')='11aa';

2. 求子串。 Copy(s,I,I) 從字元串s中截取第I個字元開始後的長度為l的子串。

例:('abdag',2,3)='bda』

3. 刪除子串。過程 Delete(s,I,l) 從字元串s中刪除第I個字元開始後的長度為l的子串。

例:s:='abcde';delete(s,2,3);結果s:='ae';

4. 插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置

例:s:=abc;insert('12',s,2);結果s:='a12bc';

⑵ C語言字元串

代碼功能:

1、輸入任意行數的內容(如果你想限制最多10行,自己加個變數計數好了)。

2、不想輸入時,新行直接回車,會刷新顯示統計個數。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedefstructstrs
{
charstr[100];
structstrs*next;
}STRS;
voidcontWord(char*str);//對字元串大小寫字母計數
voidintput(STRS**strsHead,STRS**strsTail);//輸入字元串,並顯示統計結果(每輸入完一行回車時,刷新數據)
voidprfStrs(STRS*strsHead,inttj);//列印字元串及統計結果
intdCon=0;//大寫字母計數
intnCon=0;//數字計數
intmain()
{
STRS*strsHead=(STRS*)malloc(sizeof(STRS));
strsHead->next=NULL;
STRS*strsTail=NULL;
intput(&strsHead,&strsTail);
return0;
}
voidprfStrs(STRS*strsHead,inttj)//tj=1輸出統計結果;tj=0不輸出統計結果
{
while(strsHead->next!=NULL)
{
printf("%s ",strsHead->next->str);
strsHead=strsHead->next;
}
if(tj==1)
{
printf("大寫字母個數:%d ",dCon);
printf("數字輸入個數:%d ",nCon);
}
}
voidcontWord(char*str)
{
intlen=strlen(str),i;
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
dCon++;
if(str[i]>='0'&&str[i]<='9')
nCon++;
}
}
voidintput(STRS**strsHead,STRS**strsTail)
{
STRS*strsNew;
charc;
while(1)
{
strsNew=(STRS*)malloc(sizeof(STRS));
memset(strsNew->str,0,100);
if(strsNew->str[0]==0)
{
c=0;
c=getchar();
if(c==' ')
{
system("cls");
prfStrs(*strsHead,1);
break;
}
else
{
strsNew->str[0]=c;
}
}


gets(&strsNew->str[1]);
strsNew->next=NULL;
if((*strsHead)->next==NULL)
(*strsHead)->next=strsNew;
else
(*strsTail)->next=strsNew;
*strsTail=strsNew;
contWord(strsNew->str);
}
}

⑶ c語言字元串函數有哪些

復制相關函數:memcpy、memmove、strcpy、strncpy
字元串連接函數:strcat、strncat
字元串比較函數:memcmp、strcmp、strcoll、strncmp、strxfrm、
查找函數:memchr、strchr、strcspn、strpbrk、strrchr、strspn、strstr、strtok
其他相關函數:memset、strerror、strlen

⑷ c語言字元串處理函數有哪些

1、puts函數——輸出字元串的函數

一般的形式為puts(字元串組)

作用:將一個字元串輸出到終端。如,char一個string,並賦予初值。調用puts(string);進行字元串的輸出。

2、gets函數——輸入字元串的函數

一般的形式:gets(字元數組)

作用:從終端輸入一個字元串到字元數組,並且得到一個函數值成為字元數組的起始地址。

gets(str);

鍵盤輸入,,,,你懂得。

注意:puts和gets函數只能輸出或者輸入一個字元串。

3、strcat函數——字元串連接函數

一般的形式:strcat(字元數組1,字元數組2);

作用:把兩個字元串數組中字元串連接起來,把字元串2連接到字元串1的後面。

說明:字元數組1必須足夠大,以便容納連接後的新字元串。

4、strcpy/strncpy函數——字元串復制函數

一般形式:strcpy(字元數組1,字元串2);

作用:將字元串2復制到字元數組1中去。

如:char str1[10],str2[]="DongTeng";

strcpy(str1,str2);

執行後的結果為:你懂得

注意:

1. 不能用賦值語句直接將一個字元串常量或者字元數組直接給一個字元數組。

2. 用strncpy可以賦值指定的位置的字元。strncpy(str1,str2,3);將str2中的第3個字元復制到str1中。

5、strcmp函數——字元串比較函數

一般形式:strcmp(字元串1,字元串2);

作用:用來比較兩個字元串的差異。具有不同的比較規則。

6、strlen函數——測字元串長度的函數

一般形式:strlen(字元數組);

如:char str[10]="DongTeng";

printf("%d",strlen(str));

得到的結果是:5

7、strlwr函數——轉換為小寫的函數

一般形式:strlwr(字元串);

8、strupr函數——轉換為大寫的函數

一般形式:strupr(字元串)。

⑸ c語言中的字元型的運算。

#include <iostream>

#include <string>

#include <algorithm>

using namespace std;


void k_add(string a, string b, int k)

{

//將長的字元串放在前面

if (a.size() < b.size())

{

string temp = a;

a = b;

b = temp;

}


//對源字元串進行翻轉

reverse(a.begin(), a.end());

reverse(b.begin(), b.end());



bool carry = false; //進位

//字元串相加

size_t i = 0;

for (; i < b.size(); i++)

{

if (i < b.size())

{

a[i] += b[i] - '0';

if (carry) a[i] += 1;

carry = false;

if (a[i] >= k + '0')

{

a[i] -= k;

carry = true;

}

}

}


for (; i < a.size(); i++)

{

if (carry) a[i] += 1;

carry = false;

if (a[i] >= k + '0')

{

a[i] -= k;

carry = true;

}

}


if (carry)

{

a.push_back('1');

}

//輸出

bool begin = false;

for (int j = a.size() - 1; j >= 0 ; j--)

{

if (a[j] > '0')

{

begin = true;

}

if (begin)

{

cout << a[j];

}

}

cout << endl;

}

簡單模擬即可

10進制測試

⑹ C語言知識總結

c語言概要
第一章、 概述
1、 c語言的基本知識
1.1、 c語言的執行步驟
編輯-程序代碼的錄入,生成源程序*.c
編譯-語法分析查錯,翻譯生成目標程序*.obj
(語法或邏輯錯誤,從第一個開始改,變數定義,語句格式,表達式格式等)
鏈接-與其他目標程序或庫鏈接裝配,生成可執行程序*.exe
執行
1.2、 main函數的基本知識
main()函數的位置
c程序總是從main( )函數開始執行
一個c程序可以包含一個主函數,即main()函數;也可以包含一個main()函數和若干其它函數
1.3、 c程序的結構
函數與主函數
程序由一個或多個函數組成
必須有一個且只能有一個主函數main()
程序執行從main開始,在main中結束,其他函數通過嵌套調用得以執行
程序語句
C程序由語句組成
用「;」作為語句終止符
注釋
//

/* */ 為注釋,不能嵌套
不產生編譯代碼
1.4、c 程序書寫的規則
習慣用小寫字母,大小寫敏感
不使用行號,無程序行概念:通常一個語句佔一行
可使用空行和空格
常用鋸齒形的書寫格式;同一層次結構的語句上下對齊。
第二章、基本數據類型與運算
2.1、c程序的數據類型
注意類型和變數含義的不同(類型是固定好的名字,變數是自己起的名字)
變數佔用的存儲空間
數據類型
基本類型:整型、字元型、浮點型(單精度型,雙精度型)
構造類型:數組類型、結構體類型
指針類型
空類型
注意基本類型賦初值的方式
基本數據類型的表示形式
整形數據
十進制:以非0數字開頭,如:123,-9,0
八進制;以0數字開頭,如:0123,067
十六進制:以0x開頭,如:0x123,0xff
實型數據
十進制:必須帶小數點,如:123.0,-9.0
指數形式;如:1.23E3,0.9e-2,5e2
字元型數據
普通字元:如:』a』,』2』,』H』,』#』
轉義字元:如:』\n』,』\167』,』\xlf,』\\』
(實現幾列的對齊:指定寬度。如%100\ 『\t』製表位)
(字元串長度。「abc\n\t\\」 strlen 6; sizeof 7)
基本數據類型的存儲長度
整型
Int 位元組數 2 位數 16 數的表示範圍 -32768—32767
Short 2 16 -32768—32767
Long 4 32 -2147483648—2147483647
實型
Float 4 32 3.4e-38---3.4e38
Double 8 64 1.7e-308---1.7e308
字元型
Char 1 8 -128----127
2.2、標識符命名規則
C語言標志符命名規則
標識符有數字,字母,下劃線組成
標識符的首字元必須為字母和下劃線
標識符不能為c語言的保留字(關鍵字)
如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed
算術運算符 + - * / %
關系運算符 > < == >= <= !=
邏輯運算符 ! && ||
位運算符 << >> ~ | ^ &
賦值運算符 = 及其擴展賦值運算符
條件運算符 ? :
逗號運算符 ,
指針運算符 * &
求位元組數運算符 sizeof
強制類型轉換運算符 (類型)
分量運算符 . ->
下標運算符 [ ]
其他 如函數調用運算符()
運算符的優先順序
由高到低:單目運算符,算數運算符,關系運算符,賦值運算符
說明:單目運算符:自增運算符,自減運算符,類型裝換運算符。結合方向:自右至左
如:++--I 先—i.。
算術運算 結合方向自左至右
2.3基本運算和表達式
關系表達式和邏輯表達式
(a>b)&&(x>y) (a==b)||(x==y) !=a||(a>b)
A&&b.a為0.不執行b
A||b a為1.不執行b
在 c 中邏輯運算結果:1代表「真」,0代表「假」;
判斷一個表達式是否真:0代表「假」,非0代表「真」
條件表達式 逗號表達式
如:k=5,k++
逗號值為5;k為6.
表達式1?表達式2 :表達式3
K=5>6 ? 1 : 0
2.4、混合運算的數據類型轉換
2/3+0.5 雙精度浮點型
第三章、順序結構程序設計
3.1、c語句的分類
簡單語句
表達式語句 表達式+分號
空語句 只有分號的語句
復合語句 用花括弧將若干語句括起來
流程式控制制語句
選擇語句 if ,switch
循環語句 while, do while , for
轉移語句 break ,continue ,return goto
3.2、格式輸入函數scanf
一般形式:scanf(「格式控制字元串「,地址列表);
使用scanf函數時,需要注意:
格式字元的個數必須與輸入項的個數相同,數據類型必須一一對應,非格式字元串(說明性的)要原封不動的輸入。
輸入實行數據時,可以不帶小數點,即按整型數據輸入
數值型數據與字元或字元串混合輸入時,需要注意輸入方式。
3.3、格式輸出函數printf
Printf(「格式控制字元串「,輸出列表);
指定輸出格式,由格式字元串和非格式字元串兩種組成,非格式字元串照原樣輸出。
%[標志][輸出最小寬度][.精度][長度]類型
標志:- 左對齊;+ 右對齊;
%f, %d, %c, %s
3.4、其他輸入輸出函數
Putchar getchar puts gets
第四章、選擇結構程序設計
If選擇結構
單分支
If(表達式)
語句
雙分支
If(表達式)
語句1
Else
語句2
多分支
If (表達式1)
語句1
Else if(表達式2)
語句2
。。。
Else if(表達式m)
語句m
Else
語句n
Switch(表達式)
{
Case 常量表達式1:語句1;break;
Case 常量表達式2:語句2;break;
。。。
Case 常量表達式m:語句m;break;
Default:語句n;break;
}
注意break的使用
第五章、循環結構程序設計
循環三要素
初始條件 ;終止條件 ;在初始條件和終止條件間反復做某件事情(循環體)
While(表達式)
語句

Do
語句
While(表達式);

For(循環體變數賦初值;循環條件;循環變數增量)
( for( ) ; // ; 進行時間延遲。在信息交換等時用。如for(i=0,i<100) ; 互相通訊的時間延遲。 Delay )
Break語句 :不能用於循環語句和switch語句之外的任何其他語句;跳出循環。
Continue語句 :跳過循環體中剩餘的語句而強行執行下一次循環;跳出本次循環。
第六章、函數與編譯預處理
6.1、函數的定義和調用
類型標識符 函數名 (形式參數列表)
{ 聲明部分
語句
}
例:
Int max (int x,int y)
{int z;<br>Z=x>y?x:y;<br>Return(z);}
6.2、局部變數和全局變數
注意函數中靜態變數的定義和使用
6.3、變數的存儲類型
局部變數的存儲類型
自動變數(auto) 動態存儲
局部靜態變數(static) 靜態存儲
寄存器變數(register) 靜態存儲
全局變數的存儲類型
自動變數(auto) 動態存儲
外部變數 (extern) 靜態存儲
全局靜態變數(static )靜態存儲
Extern 外部引用
Static 不能用extern 引用。
第七章、數組
7.1、一維數組的定義和使用
特別需要注意循環體的初值,終止條件
例:
Main()
{
Int I,a[10];
For(i=0;i<=9;i++)
A=I;
For(i=9;i>=0;i--)
Printf(「%d」,a);
}
注意下標問題
7.2、二維數組的定義和使用
二維數組的初始化
例如:
Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};
例如:int a[3][3]={{1},{2},{3}};
是對每一行的第一列元素賦值,未賦值的元素取0
7.3、字元數組和 字元串
字元串用字元數組來處理,結束標志符 『\0』
如:char c[ ]={「I am happy」};
用字元串常量使字元數組初值化
Char c[ ]={『I』,』 『,』a』,』m』,』 『,』h』,』a』,』p』,』p』,』y』,』\0』};
第八章、指針
8.1、地址和指針的概念
Int I;
Int *i_point;
8.2、指針變數和變數的地址
操作符:* &
8.3、指針和一維數組
若有定義
Int a[10];
Int *p=a;
分析下面表達式的含義:
A, &a,
*(a+i), a+I,
*(p+i), p+i
A=*(a+i)=*(P+i)
&a=a+i=p+i
8.4、指針與字元串
Main()
{
Char string[ ]=」I love china!」;
Printf(「%s\n」,string);
}
Main()
{ char *string=」I love china!」;
Printf(「%s\n」,string);
}
8.5、指針變數作為函數參數
形參的定義方式;實參的形式;參數的傳遞方式。
第九章、結構體
9.1、結構體類型和變數的定義
Struct 結構體名
{成員列表};
Struct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};

Stuct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Struct student stu1, stu2;
9.2、結構體變數的引用
一般形式為:
結構體變數名.成員名
9.3、結構體數組
結構體數組 結構體數組元素.成員名
指向結構體的指針變數
(*p).成員名
p->成員名
其他
Strcpy(字元數組1,字元串2)
Strcat(字元數組1,字元數組2)
Strcmp(字元串1,字元串2)
Strlen(字元數組)

⑺ c語言中,字元、字元串有什麼作用可以進行哪些運算還有什麼用法謝謝幫忙

字元就是代表一個字元咯,比如'a','1',等,都是一個字元,字元也可以直接與另一個字元進行+,-,*,/的運算,因為在運算過程中,他們可以隱式地將字元轉換為ASCII碼值。
字元串就是一串字元,可以是一個,也可以是多個,字元串的長度為字元個數加1,因為字元串會在最後一個字元後面隱式地加上一個結束符'/0'。
字元串用來進行運算通常是用於2個比較大的整數之間的運算,如
*
像這種長度的數字,是沒有數據類型與之進行匹配的,這個時候就得使用字元串進行運算,取出字元串中各個位上的數字進行單獨運算,
如果想了解得更仔細,可以 HI我。

⑻ C語言中的字元串

C語言的字元串是一片連續的空間,用'\0'表示字元串的結尾。如果從一個字元指針作為字元串的起始進行訪問,當遇到'\0'之前的整段空間的值都會被當做字元串的內容。LZ的程序中只復制的字元串長度等於串長的部分,沒有復制'\0'造成訪問越界。在VC++中用Debug模式運行程序,自帶的Microsoft C&C++ Debugger會把未初始化的棧空間的每個位元組填充為0xCC以便查錯,而訪問到這段空間把連續的0xCCCC當做字元串了,按GBK編碼顯示為漢字「燙」。
可以改成這樣:
#include <stdio.h>
#include<string.h>
int main()
{ char a[80],b[80];
int i,t;
scanf("%s",a);
t=strlen(a);
for(i=0;i<t;i++)
b[i]=a[i];
b[i]='\0';
printf("%s\n",b);
}
====
[原創回答團]

⑼ c語言 求總結字元串輸入、輸出函數使用的區別。

C語言中的輸入輸出函數總結
C語言中數據輸入輸出的概念及在C語言中的實現
(1)所謂輸入輸出是以計算機為主體而言的。
(2)本章介紹的是向標准輸出設備顯示器輸出數據的語句。
(3)在C語言中,所有的數據輸入/輸出都是由庫函數完成的。 因此都是函數語句。
(4)在使用C語言庫函數時,要用預編譯命令#include將有關「頭文件」包括到源文件中。使用標准輸入輸出庫函數時要用到 「stdio.h」文件,因此源文件開頭應有以下預編譯命令:#include< stdio.h >或#include 」stdio.h」,stdio是standard input &outupt的意思。
(5)考慮到printf和scanf函數使用頻繁,系統允許在使用這兩個函數時可不加#include< stdio.h >或#include 」stdio.h」
一、字元數據的輸入輸出
( 1 ) putchar 函數(字元輸出函數)
putchar 函數是字元輸出函數, 其功能是在顯示器上輸出單個字元。其一般形式為:putchar(字元變數).對控制字元則執行控制功能,不在屏幕上顯示。使用本函數前必須要用文件包含命令:#include<stdio.h>或#include 「stdio.h」
( 2 ) getchar函數(鍵盤輸入函數)
getchar函數的功能是從鍵盤上輸入一個字元。其一般形式為:getchar();
通常把輸入的字元賦予一個字元變數,構成賦值語句,如:char c; c=getchar();使用getchar函數還應注意幾個問題:
1)getchar函數只能接受單個字元,輸入數字也按字元處理。輸入多於一個字元時,只接收第一個字元。
2)使用本函數前必須包含文件「stdio.h」。
3)在TC屏幕下運行含本函數程序時,將退出TC 屏幕進入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。
二、格式輸入與輸出
(1)printf函數(格式輸出函數)
printf函數稱為格式輸出函數,其關鍵字最末一個字母f即為「格式」(format)之意。其功能是按用戶指定的格式,把指定的數據顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個函數。
(1)printf函數調用的一般形式
printf函數是一個標准庫函數,它的函數原型在頭文件「stdio.h」中。但作為一個特例,不要求在使用 printf 函數之前必須包含stdio.h文件。printf函數調用的一般形式為:printf(「格式控制字元串」,輸出表列),其中格式控制字元串用於指定輸出格式。格式控制串可由格式字元串和非格式字元串兩種組成。格式字元串是以%開頭的字元串,在%後面跟有各種格式字元,以說明輸出數據的類型、形式、長度、小數位數等。如:「%d」表示按十進制整型輸出;「%ld」表示按十進制長整型輸出;「%c」表示按字元型輸出等。非格式字元串在輸出時原樣照印,在顯示中起提示作用。輸出表列中給出了各個輸出項,要求格式字元串和各輸出項在數量和類型上應該一一對應。
***格式字元串
格式: [標志][輸出最小寬度][.精度][長度]類型
1)類型:類型字元用以表示輸出數據的類型,其格式符和意義如下表所示:
d,以十進制形式輸出帶符號整數(正數不輸出符號)
o,以八進制形式輸出無符號整數(不輸出前綴0)
x或X ,以十六進制形式輸出無符號整數(不輸出前綴Ox)
u,以十進制形式輸出無符號整數
f,以小數形式輸出單、雙精度實數
e或E,以指數形式輸出單、雙精度實數
g或G,以%f或%e中較短的輸出寬度輸出單、雙精度實數
c,輸出單個字元
s,輸出字元串
2)標志:標志字元為-、+、#、空格四種,其意義下表所示:
-,結果左對齊,右邊填空格
+,輸出符號(正號或負號)
空格,輸出值為正時冠以空格,為負時冠以負號
#,對c,s,d,u類無影響;對o類,在輸出時加前綴o;對x類,在輸出時加前綴0x;對e,g,f 類當結果有小數時才給出小數點
3)輸出最小寬度:用十進制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或0。
4)精度:精度格式符以「.」開頭,後跟十進制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字元,則表示輸出字元的
個數;若實際位數大於所定義的精度數,則截去超過的部分。
5.長度:長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
(2)scanf函數(格式輸入函數)
scanf函數稱為格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。
(1) scanf函數的一般形式
scanf函數是一個標准庫函數,它的函數原型在頭文件「stdio.h」中,與printf函數相同,C語言也允許在使用scanf函數之前不必包含stdio.h文件。scanf函數的一般形式為:scanf(「格式控制字元串」,地址表列);其中,格式控制字元串的作用與printf函數相同,但不能顯示非格式字元串,也就是不能顯示提示字元串。地址表列中給出各變數的地址。地址是由地址運算符「&」後跟變數名組成的。這個地址就是編譯系統在內存中給a,b變數分配的地址。在C語言中,使用了地址這個概念,這是與其它語言不同的。應該把變數的值和變數的地址這兩個不同的概念區別開來。變數的地址是C編譯系統分配的,用戶不必關心具體的地址是多少。
(2) 格式字元串
格式字元串的一般形式為:%[*][輸入數據寬度][長度]類型其中有方括弧[]的項為任選項。各項的意義如下:
1) 類型:表示輸入數據的類型,其格式符和意義如下表所示。
d,輸入十進制整數
o,輸入八進制整數
x,輸入十六進制整數
u,輸入無符號十進制整數
f或e,輸入實型數(用小數形式或指數形式)
c,輸入單個字元
s,輸入字元串
2) 「*」符:用以表示該輸入項,讀入後不賦予相應的變數,即跳過該輸入值。
如:
scanf("%d %*d %d",&a,&b);
當輸入為:123時,把1賦予a,2被跳過,3賦予b。
3) 寬度:用十進制整數指定輸入的寬度(即字元數)。
例如:
scanf("%5d",&a);
輸入:12345678
只把12345賦予變數a,其餘部分被截去。
又如:
scanf("%4d%4d",&a,&b);
輸入:12345678
將把1234賦予a,而把5678賦予b。
4) 長度:長度格式符為l和h,l表示輸入長整型數據(如%ld) 和雙精度浮點數(如%lf)。h表示輸入短整型數據。
使用scanf函數還必須注意以下幾點:
1))scanf函數中沒有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語句輸入小數為2位的實數。
2))scanf中要求給出變數地址,如給出變數名則會出錯。如 scanf("%d",a);是非法的,應改為scnaf("%d",&a);才是合法的。
3))在輸入多個數值數據時,若格式控制串中沒有非格式字元作輸入數據之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數據(如對「%d」輸入「12A」時,A即為非法數據)時即認為該數據結束。
4))在輸入字元數據時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元。
例如: scanf("%c%c%c",&a,&b,&c);
輸入為:def
則把'd'賦予a, ' ' 賦予b,'e'賦予c。
只有當輸入為:def
時,才能把'd'賦於a,'e'賦予b,'f'賦予c。
如果在格式控制中加入空格作為間隔,
如:scanf ("%c %c %c",&a,&b,&c);
則輸入時各數據之間可加空格。
5) 如果格式控制串中有非格式字元則輸入時也要輸入該非格式字元。
例如:scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符「 , 」作間隔符,故輸入時應為:5,6,7
又如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);
則輸入應為:a=5,b=6,c=7
6) 如輸入的數據與輸出的類型不一致時,雖然編譯能夠通過,但結果將不正確。

⑽ 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作為字元串使用了。