当前位置:首页 » 编程语言 » 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函数,也可以自己用循环实现