下列对 C 语言字符数组的描述中错误的是 ( )
A. 字符数组可以存放字符串
B. 字符数组中的字符串可以整体输入、输出
C. 不可以用关系运算符对字符数组中的字符串进行比较
D. 可以在赋值语句中通过赋值运算符 "=" 对字符数组整体赋值
答案:D
分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,不能通过运算符比较,可以通过函数比较大小长度
下列描述中不正确的是( )
A.字符型数组中可以存放字符串
B.可以对字符型数组进行整体输入、输出
C.可以对整型数组进行整体输入、输出
D.不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
答案:C
分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,整数型数组不能整体输出
下列代码片段执行的结果是:
char szTest[] = "ABCDEF";
strncpy(szTest, szTest, 4);
printf("%s", szTest);
A.ABCD B. ABCDE C. ABCDEF D. 以上都不对
答案:C
分析:strncoy函数是将前n个值赋给另一个数组,目标数组和操作数组是一个,所以结果还是原数组
以下对字符数组test 赋值方式错误的是( )
A. char test[10]; strcpy(test, "test");
B. char test[10]; test="test";
C. char test[]={'t', 'e', 's', 't’};
D. char test[10]={'t', 'e', 's', ‘t’};
答案:B
分析:A通过函数赋值过去,B创建完字符数组后,不能赋值,C以单字符形式插入,D以单字符形式插入
以下语句不能正确赋值的是( )
A. char *s = "China";
B. char s3[20] = "China";
C. char s2[]={'C', 'h', 'i', 'n', 'a'};
D. char s1[10]; s1="China";
答案:D
分析:A是以指针形式创建,B在创建时可以直接赋值,C以单字符赋值,D创建完数组容器后不能单独赋值
以下程序运行后输出结果是( ) (题目有些许问题,凑合看吧,懒得改了)
main()
{
char ch[2][5] = {"693", "825"}, p[2][5];
int i, j, s = 0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>='0' && p[i][j]<='9';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n", s);
}
A.6385 B. 33 C. 693825 D. 22
答案:A
分析:第一个for循环是将ch数组的值,赋给p数组,第二个for循环是遍历数组行,第二个for循环内嵌套的循环是为了保证字符在 '0' 到 '9' 之间,然后每隔一个字符取一个字符,将其以组合成一个数字
为了比较两个字符串s1和s2是否相等,应当使用( )
A. if(s1 = s2) B. if(s1==s2)
C. if(strcmp(&s1, &s2)==0) D. if(strcmp(s1, s2)==0)
答案:D
分析:字符串比大小不能直接用等于号,所以AB错了,C:&s1是s1字符串的地址,输出错误,D是对的
编写一个程序。输入一个字符串,将其逆序后输出?
//创建字符数组,并通过键盘键入一串字符串
char arr[20];
printf("Enter a string!\n");
gets(arr);
//创建交换容器
int temp;
//再数组头和尾端插旗子,交换旗子位置的值,因为strlen计算出来的值包括了'\0'所以需要减一
int i = 0,j = strlen(arr) - 1;
//当开头的旗子一直再结尾的旗子左边,就交换
while (i < j){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++,j--;
}
//输出数组值
printf("%s\n",arr);
编写一个程序。负责将一个字符串拷贝到另一个字符串,不调用 C++/C 的字符串库函数。
//创建初始字符串数组,并从键盘输入
char arr1[20];
printf("Enter a string!\n");
gets(arr1);
//创建目标数组
char arr2[20];
//创建旗子,交换两个数组中旗帜对应地址的值
int i = 0;
//在遍历到'\0'前会一直交换值
while (arr1[i] != '\0'){
arr2[i] = arr1[i];
i++;
}
//手动给字符串结尾
arr2[i] = '\0';
//输出字符串
printf("%s\n",arr2);
编写一个程序。不使用字符串连接函数strcat,实现两个字符串的链接
//创建初始字符串数组,并从键盘输入
char arr1[20];
printf("Enter a string arr1!\n");
gets(arr1);
//创建数组二并键入需要添加的字符串
char arr2[20];
printf("Enter a string arr2!\n");
gets(arr2);
//创建arr1数组的标记i,arr2数组的标记2
int i = 0,j = 0;
//遍历数组arr1
while (1){
//当arr1数组的值是'\0'的时候,进入尾插循环
if(arr1[i] == '\0'){
//进行尾插,需要把'\0'都给插入进去
//所以当标记i还是'\0'的时候还需要进行一次插入
//所以插入完后,上一个位置会是'\0',判断i的上一个位置是'\0'就退出循环
while (arr1[i - 1] != '\0'){
arr1[i] = arr2[j];
j++,i++;
}
//然后在跳出遍历数组arr1
break;
}
i++;
}
//打印数组
printf("%s",arr1);
编写一个程序。请实现输入一个字符串,这个字符串字符串包含一个或多个数字,把这些数字字符转换为整数,如果字符串参数包含了非数字字符,置零,不必担心算数溢出
输入:123abc456
输出:printf(“%d\n” , num); num=123000456
//创建数组,并通过键盘键入
char arr[10];
printf("Enter a string!\n");
gets(arr);
//创建结果容器
int result;
//创建数组标记i
int i = 0;
//当 i 的位置上的值不是'\0'时,不停便利数组
while (arr[i] != '\0'){
//当值不在数字字符范围内时,将其变成 '0' 字符
if(arr[i] < 48 || arr[i] > 58){
arr[i] = '0';
}
//用累加的方法,计算结果,数字字符转数字,可以使用字符减'0'字符即可
result = result * 10 + (arr[i] - '0');
i++;
}
//输出结果
printf("%d",result);
编写一个程序。实现输入N个字符串,输出这N个字符串中的最大字符串和最长字符串,可以调用字符串处理函数。
//创建字符串个数容器,并通过键盘键入
int N;
printf("How many string do you want to make?\n");
scanf("%d",&N);
//吸收回车字符
getchar();
//创建N行二维数组,通过循环键入字符串
char arr[N][100];
for (int i = 0; i < N; ++i) {
printf("%d string:\n",i + 1);
gets(arr[i]);
}
//创建最大长度数组容器,最大字符数组容器
char max_length[100];
char max_array[100];
//将两个数组初始化为arr[0]
strcpy(max_length,arr[0]);
strcpy(max_array,arr[0]);
//遍历每个字符串
for (int i = 1; i < N; ++i) {
//当最大长度字符串数组没有arr[i]长度长时,记录arr[i]的值
if(strlen(max_length) < strlen(arr[i])){
strcpy(max_length,arr[i]);
}
//当最大字符串数组没有arr[i]大时,记录arr[i]的值
if(strcmp(arr[i],max_array) > 1){
strcpy(max_array,arr[i]);
}
}
//输出记录的值
printf("MaxLength : %s MaxArray : %s",max_length,max_array);