⑴ c語言字元串跟字元數組的定義都一樣,那如何區分呢
實現目的
我們在用C語言編寫程序時,經常會遇到使用字元串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字元串,但每個字元串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標准模板庫的字元串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字元串數組呢?
如對於下面的一個字元串數組:
str = {
「I love C.」,
「I love C++.」,
「I love JAVA.」,
「I love Python.」,
「I love LabVIEW.」
}
下面給出C語言中的兩種定義方法。
方法1:定義一個char類型的二維數組
這種方法是通過定義一個char類型的二維數組實現,通過二維數組的行索引可得到數組中的每個字元串,列的大小限定了每個字元串所能包含的最大字元個數,所以採用這種定義方式時,列的大小必須不能小於數組所有字元串的最大長度。如對於上面的數組,C語言的定義代碼如下:
在取該數組的每個字元串時,直接對行索引即可。
方法2:定義一個指向char類型的指針數組
這種方法是通過定義一個指向char類型的指針數組實現,數組中的每個元素都是一個指針,通過該指針可得到數組中的每個字元串。如對於上面的數組,C語言的定義代碼如下:
兩種方法對比
上面的兩種方法都可以實現我們的目的,但在內存的佔用上兩種方法不同。第1種方法定義了一個5行20列的二維數組,即每個字元串所佔的位元組長度都為20個,所以共需要佔用100個位元組,而第2種方法是定義的指針數組,每個指針指向的字元串佔用的位元組長度是其實際長度,所以其總的長度肯定小於100個位元組。綜合來講,第1種方法相對於第2種方法,造成了存儲空間的浪費情況。
字元串數組定義及使用的完整測試代碼
下面給出這個例子的完整的C語言測試代碼,如下圖所示:
程序運行結果如下圖所示:
總結
一般在C語言中定義字元串的數組時,推薦使用第2種方法,特別是對於單片機、嵌入式等方面的程序開發時,可以充分利用有限的硬體資源,避免存儲空間的浪費。
⑵ C語言中怎麼判斷一個字元串包含在另一個字元串裡面
#include<stdio.h>
#include<string.h>
intmain()
{
intflag;
chara[30]="iamtired";
charb[100];
scanf("%s",b);
if(strstr(b,a))
flag=1;
else
flag=0;
printf("flag=%d ",flag);
return0;
}
⑶ c語言中輸入一個字元串並判斷在數組中的第幾位應該怎麼判斷啊
strstr(str1,str2) 函數用於判斷字元串str2是否是str1的子串。如果是,則該函數返回str2在str1中首次出現的地址;否則,返回NULL。
⑷ 用C語言 輸入一串字元串,將其放到數組中,判斷字元串中是否有想要的字元,如果
字元串里找一個字元,輸出找到的個數,程序如下:
#include <stdio.h>
int main()
{
char s[100];
char t;
int i,n=0;
printf("input one line string:\n");
gets(s);
printf("input a char which you want to search:\n");
fflush(stdin); //為了讀入一個字元,要先清除一次輸入緩沖區
scanf("%c",&t); //讀一字元
for (i=0;i<strlen(s);i++) if (s[i]==t) n++; //判斷
printf("there are %d char %c in the string\n",n,t); //輸出
return 0;
}
⑸ 在C語言中怎樣判斷一個字元串中是否包含另一個字元串
如果「一個字元串」全部是英文字元的話,只要開一個chars[128];的哈希表,每個在其中出現的字元按它的ASCII值,將相應的元素置為1;
然後掃描「另一個字元串」,檢測每一個字元,在數組中對應元素的值是否為1。若這個串里的對應元素值全部為1,則是「包含另一個字元串所有的字元」。
這個演算法的時間復雜度為O(n1+n2),n1和n2是二個字元串的長度。
#iclude<stdio.h>
int main()
{char s1[200],s2[200],s[128]={0};//初始化,所有字元均未出現
int i,k=1;
gets(s1);
gets(s2);
for(i=0;s[i];i++)
s1[s[i]]=1;//將字元串s1中出現的每一個字元,均「記錄在案」
for(i=0;s2[i];i++)
if(!(s[s2[i]]))k=0;//若s2中有字元在「記錄簿」中未出現,就作記錄
if(k)printf("s1包含了s2中的全部字元 ");//根據是否有記錄輸出相應記錄
elseprintf("s1未包含s2中的全部字元 ");
return 0;
}
⑹ C語言 字元串和字元串數組怎麼判斷
a=zkm
*a=*zkm=zkm[0]=『1』
這是一個字元。
而"12345"是字元串
兩個自然不相等
和你說的字元數組和字元串 沒什麼關系。
即使是a和"12345"也是不相等的 一個是常量字元串 一個是變數字元串,有不同地址。
⑺ C語言。怎麼判斷一個字元串/數字,屬於多個或單個數組中的數組元素。
字元串
賦給
字元串,要用
strcpy()
這類函數,
例如:
char
str1[2][10],str2[2][10]={"abcdefg",
"01234567"};
strcpy(str1[1],
str2[0]);
strcpy(str1[0],
str2[1]);
printf("%s
%s",
str1[0],str1[1]);
---------------------------------
字元數組中的一個元素,
賦給另一個字元數組中的一個元素:
#include
int
main(){
char
str1[10],str2[10]="01234567";
str1[3]=str2[5];
printf("%c
%c",str1[3],str2[5]);
return
0;
}
⑻ C語言,如何判斷一個字元數組中元素是否包含除字母(a-z,A-Z)和數字(0-9)以外的東西。
可以的,利用循環。
下面只判斷是不是全為字母或數字,如果不是則列印其位置和符號。
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i,c=0;
char a[6];
scanf("%s",&a);
for(i=0; i<5 ;i++)
{
if(a[i] <= 'z'&&a[i] >='a'||a[i] <= 'Z' && a[i] >='A'||a[i]>=48 && a[i]<=57)
{
c++;
}
else
printf("第%d個位置:%c\n",i+1,a[i]);
}
if(c==5)
{
printf("全為字母或數字\n");
}
}
不懂的地方可以追問
⑼ C語言中怎麼查找字元串數組中的某個字元
程序有誤,修改如下:
#include <stdio.h>
#include <string.h>
void main(){
char sh[20];
gets(sh);
for(int i=0;i<20;i++)
{
if(sh[i]='@')
{
printf("判斷出有字元@ ");
break;
}
if(sh[i]='