⑴ 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]='