全国计算机等级考试二级教程-C语言程序设计_第10章_字符串
字符型指针数组
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> //参数中,int a[5],对应指向int类型的指针int *
//参数中,指针数组对应char *cmd[]二级指针char **
void showcmd(char **cmd, int n)
{
//此时数组退化成一个指针
printf("show=%d\n", sizeof(cmd)); int i; for (i = ;i < n;i++)
{
printf("%s\n", cmd[i]);
}
} main()
{
//一个指针数组,每个元素是指针,每个指针保存字符串常量的地址
char *cmd[] = { "notepad","calc","mspaint","write","mstsc" }; printf("main=%d\n", sizeof(cmd)); showcmd(cmd, ); system("pause");
}
指针循环,字符型指针数组
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> main()
{
//一个指针数组,每个元素是指针,每个指针保存字符串常量的地址
char *cmd[] = { "notepad","calc","mspaint","write","mstsc" }; printf("%x\n", cmd); char **p = NULL; for (p = cmd;p < cmd + ;p++)
{
printf("%s\n", *p);
} system("pause");
}
//在函数里面改变一个外部变量,就需要变量的地址
//如果是整数,函数指向数据的指针存储数据的地址
//如果是指针,就需要指向指针的指针的地址
//二级指针一般用于改变一个字符串指针的指向,指向不同的字符串
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>
#include<stdlib.h> char str1[] = "notepad";
char str2[] = "tasklist";
char str3[] = "calc"; //在函数里面改变一个外部变量,就需要变量的地址
//如果是整数,函数指向数据的指针存储数据的地址
//如果是指针,就需要指向指针的指针的地址
//二级指针一般用于改变一个字符串指针的指向,指向不同的字符串 void change(char **pp)
{
*pp = str3;
} main()
{
char *p = str1; change(&p); printf("%s", p); system("pause");
}
输入的扫描器:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> main()
{
char str[] = { }; //scanf("%[xyz]", str);
/* 只接受xyz的输入,有一个不匹配,就停止,即使后面还有xyz */ //scanf("%[^xyz\n]", str);
/* 前面加上^按位异或,可以读取xyz以外的任何字符,遇到一个匹配xyz\n就自动终止 */ scanf("%[^xyz]", str);
/* 如果没有\n,回车不会当作终止,会当作一个字符 */ //scanf("%[A-Z]", str);
/* 只接受A-Z的输入,有一个不匹配,就停止,即使后面还有A-Z */ puts(str);
}
char 字符串可以显示汉字,字符要连在一起%c%c
#include<stdio.h> main()
{
char str[] = "你好"; printf("%c%c\n", str[], str[]);
}
输出结果:
你
请按任意键继续. . .
#include <stdio.h>
main()
{
int a;
a = ;
printf("sizeof(int)=%ld\n", sizeof(int));
printf("sizeof(a)=%ld\n", sizeof(a));
}
输出结果:
sizeof(int)=4
sizeof(a)=4
请按任意键继续. . .
字符串排序有2种:
1长度strlen
2比较strcmp
读入一个3行的二维字符串数组,使用求字符串长度函数strlen,进行从大到小排序,使用冒泡排序。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>
#include <string.h>
main()
{
int i, j;
char t[], a[][];
for (i = ;i < ;i++) /* 为a表赋值 */
{
gets(a[i]);
} printf("\n");
for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
}
printf("\n"); for (i = ;i < - ;i++)
{
for (j = ;j < - - i;j++)
{
if (strlen(a[i]) < strlen(a[j])) /* 求字符串长度函数strlen */
{
strcpy(t, a[i]); /* 字符串复制函数strcpy */
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
} for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
} system("pause");
}
读入一个3行的二维字符串数组,使用字符串比较函数strcmp,进行从大到小排序,使用冒泡排序。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>
#include <string.h>
main()
{
int i, j;
char t[], a[][];
for (i = ;i < ;i++) /* 为a表赋值 */
{
gets(a[i]);
} printf("\n");
for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
}
printf("\n"); for (i = ;i < - ;i++)
{
for (j = ;j < - - i;j++)
{
if (strcmp(a[i], a[j]) < ) /* 字符串比较函数strcmp,若前者a[i]<后者a[j],函数值小于0 */
{
strcpy(t, a[i]); /* 字符串复制函数strcpy */
strcpy(a[i], a[j]);
strcpy(a[j], t);
}
}
} for (i = ;i < ;i++) /* 输出a表 */
{
puts(a[i]);
} system("pause");
}
例10.1
编写函数 slength(char * s),函数返回指针 s 所指字符串的长度,即相当于库函数 strlen 的功能。
#include <stdio.h> int slength(char * s)
{
int n = ;
while (*(s + n) != '\0')
{
n++;
}
return n;
} main()
{
char str[] = "ABCDEF";
int len1, len2;
len1 = slength("");
len2 = slength(str);
printf("len1=%d,len2=%d\n", len1, len2);
}
例10.2
编写函数 scopy(char * s, char * t),将指针 t 所指的字符串复制到指针 s 所指的存储空间中。
#include <stdio.h> void scopy(char * s, char * t)
{
int i = ;
while ((s[i] = t[i]) != '\0')
{
i++;
}
} main()
{
char str1[], str2[] = "ABCDEFGH";
scopy(str1, str2);
puts(str1);
}
例10.3
编写函数 scomp(char * s1, char * s2),将两个字符串 s1 和 s2 进行比较,若串 s1>串 s2,函数返回值为正数;若串 s1=串 s2,函数返回值为0;若串 s1<串 s2,函数返回值为负数。即相当于库函数strcmp的功能。
#include <stdio.h>
int scomp(char * s1, char * s2)
{
int i = ;
while (s1[i] == s2[i] && s1[i])
{
i++;
}
return(s1[i] - s2[i]);
} main()
{
char str1[] = "ABC", str2[];
gets(str2);
if (scomp(str1, str2) > )
{
printf("str1>str2\n");
}
else if (scomp(str1, str2) < )
{
printf("str1<str2\n");
}
else
{
printf("str1=str2\n");
}
}
10.20
请编写函数,判断一字符串是否是回文。若是回文函数返回值为1;否则返回值为0。回文是顺读和倒读都一样的字符串。
#include <stdio.h>
#include <string.h>
int ishuiwen(char * s)
{
int a;
int i = ;
int j = strlen(s) - ;
while (i < j&&s[i] == s[j])
{
i++;
j--;
}
if (i < j)
{
a = ;
}
else
{
a = ;
}
return a;
} main()
{
char str[];
scanf("%s", str);
if (ishuiwen(str))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
10.21
请编写函数,删除字符串中指定位置(下标)上的字符。删除成功函数返回被删字符;否则返回空置。
#include <stdio.h>
#include <string.h>
char delchar(char * s, int pos)
{
int i = ;
char ch = s[pos];
if (pos >= strlen(s) || pos < )
{
return ;
}
for (i = pos;s[i];i++)
{
s[i] = s[i + ];
}
return ch;
} main()
{
char str[];
int pos;
gets(str);
scanf("%d", &pos);
if (delchar(str, pos))
{
puts(str);
}
else
{
printf("NO\n");
}
}
全国计算机等级考试二级教程-C语言程序设计_第10章_字符串的更多相关文章
- 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构
switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...
- 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针
面试: unsigned int *p1 = # int *p2 = # #define _CRT_SECURE_NO_WARNINGS #include<std ...
- 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算
位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...
- 全国计算机等级考试二级教程-C语言程序设计_第9章_数组
四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构
for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...
- 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构
1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...
- 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识
正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...
- 全国计算机等级考试二级教程-C语言程序设计_第7章_函数
函数执行,从右到左执行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> main() ...
随机推荐
- Nginx学习之三-ngx_http_request_t结构体
ngx_http_request_s是nginx中非常重要的一个结构体,贯穿于htpp请求处理的整个过程中. 下面解释了ngx_http_request_s结构体中与HTTP框架相关的重要的成员变量. ...
- Oracle EBS-SQL (OM-1):查询订单发货明细.sql
select mtrh.request_number 发货单号, mmt.transaction_date 发货时间, ...
- c++ 17介绍
作者:hearts zh链接:https://www.zhihu.com/question/32222337/answer/55238928来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- linux下修改ip地址,默认网关以及DNS
*修改IP地址 即时生效: ifconfig eth0 192.168.1.100 netmask 255.255.255.0 重启生效: vim /etc/sysconfig/network-s ...
- 自制证书搭建https服务
第一步,自制CA证书和Server证书,私钥 自制CA私钥 openssl genrsa -des3 -out ca.key 4096 自制CA证书 openssl req -new -x509 -d ...
- 你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ?
你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ? 长沙戴维营教育将为你解开这个巨大的谜团大BUG! http://www.ubuntucollege.cn/course/29/ ...
- GDAL1.11版本号对SHP文件索引加速測试
GDAL库中对于矢量数据的读取中能够设置一些过滤器来对矢量图形进行筛选.对于Shapefile格式来说.假设数据量太大,设置这个过滤器时间慢的简直无法忍受.好在GDAL1.10版本号開始支持读取Sha ...
- ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
1.启动报错SQL> startupORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instanceORAC ...
- URL传参中文乱码encodeURI、UrlDecode
传递参数 encodeURI("url.aspx?str"+"汉字")-----------(是 URi 不是URL) 后台接收参数 Server.Url ...
- IIS中如何建立FTP服务
文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机.这些文件存储在运行 FTP 服务器软件的服务器计算机上.然后,远程计算机可以使用 FTP 建 ...