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

c語言如何判斷字元串在數組中

發布時間: 2022-06-09 08:56:04

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]='')printf("無字元@ ");

}

}

(9)c語言如何判斷字元串在數組中擴展閱讀:

數組的使用規則:

1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。

2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。

3.如不給可初始化的數組賦初值,則全部元素均為0值。

4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。

網路-數組

⑽ c語言中如何將一個字元串中的每個字元分出開存入數組中或者對單個字元進行判斷

C語言中,對於字元串就是用字元數組來實現的,所以要想處理單個字元,只需要索引數組即可;而字元串的拷貝可以通過strcpy函數,也可以自己用循環實現