字符数组
1、给出以下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为
A) 数组x和数组y等价 B) 数组x和数组y的长度相同
C) 数组x的长度大于数组y的长度 D) 数组x的长度小于数组y的长度
2、对字符数组str赋初值,str不能作为字符串使用的一个是( )
A) char str[]="shanghai";
B) char str[]={"shanghai"};
C) char str[9]={'s','h','a','n','g','h','a','i',’\0’};
D) char str[8]={ 's','h','a','n','g','h','a','i'};
3、判断两字符串s1,s2是否相等,应使用( ).
A)if(s1==s2) B)if(s1=s2)
C)if(strcpy(s1,s2)) D)if(strcmp(s1,s2)==0)
4、#include <stdio.h>
void main()
{
char ch[3][5]={ "AAAA","BBB","CC"};
printf("\"%s\"\n",ch[1]);
}
"BBB"
5、#include <stdio.h>
void main()
{
char str[80];
int i=0;
gets(str);
while(str[i]!=0)
{
if(str[i]>='a'&&str[i]<='z')
str[i]-=32;
i++;
}
puts(str);
}
程序运行时如果输入 upcase, 屏幕显示UPCASE
程序运行时如果输入 Aa1Bb2Cc3, 屏幕显示AA1BB2CC3
6、将一个字符数组中的数字字符找出来形成一个新的字符串,并显示新字符串。如
“a123bcd456!ui”,生成新字符串“123456”。
参考答案:
#include <stdio.h>
void main()
{
char str[100],news[100];
int i,j;
gets(str);
j=0;
for(i=0;str[i]!='\0';i++)
if(str[i]>='0'&&str[i]<='9')
{ news[j]=str[i];j++;}
news[j]='\0';
puts(news);
}
7、编一程序,将两个字符串连接起来。除gets和puts外,不能使用其他任何字符串函数。参考程序如下: 把第2个字符串连接到第1个串的后面。
#include <stdio.h>
void main()
{
char s1[100],s2[30]; //注意s1要够长,来容得下连接后的字符串
int i,j;
gets(s1);
gets(s2);
for(i=0;s1[i]!='\0';i++)
; //空循环,目的是让i指向s1的’\0’的位置
for(j=0;s2[j]!='\0';j++) //把s2中的字符逐一拷贝到s1后面
s1[i+j]=s2[j];
s1[i+j]='\0'; //别忘了在s1后加’\0’
puts(s1);
}
8、找出10个字符串中最长的字符串。
参考答案:
#include <stdio.h>
#include <string.h>
void main()
{
char s[10][30]; //10表示10个字符串,30表示每个字符串最多有29个字符组成,
//30可以根据需要自己确定
int i;
int max;//存最长字符串的长度
int pos;//存最长字符串的行下标
for(i=0;i<10;i++)
gets(s[i]);
max=strlen(s[0]);
pos=0;
for(i=1;i<10;i++)
if(max<strlen(s[i]))
{
max=strlen(s[i]);
pos=i;
}
//循环结束后pos中存放的是最长字符串的行下标
printf("the longest strint is %s", s[pos] );
}
9、有 N个国家名,要求按字母先后顺序排列(用起泡排序法)后输出。
#include <stdio.h>
#include <string.h>//注意别丢掉
#define N 10
void main()
{
char names[N][30];//N表示N个国家名字,即N个字符串,30表示每个名字字符串最多有
// 29个字符组成,可以自己确定
char string[30];//交换两个字符串时用
int i,j;
printf("please input %d names\n",N);
for(i=0;i<N;i++)
gets(names[i]);//注意这里的names[i]不是单个字符,而相当于一个字符数组名
for(i=0;i<N-1;i++)//表示起泡排序进行的N-1趟
for(j=0;j<N-1-i;j++)//表示第i趟进行的多次比较
if(strcmp(names[j],names[j+1])>0) //注意这里比较和交换的是字符串,不是单个字符
{
strcpy(string,names[j]);
strcpy(names[j],names[j+1]);
strcpy(names[j+1],string);
}
printf("the sorting names are as following\n");
for(i=0;i<N;i++)
puts(names[i]);
}