字符型指针数组

#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章_字符串的更多相关文章

  1. 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构

    switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...

  2. 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针

    面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<std ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算

    位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...

  4. 全国计算机等级考试二级教程-C语言程序设计_第9章_数组

    四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  6. 全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构

    for循环结构的嵌套 外层循环每循环一次,内层循环会完整循环一次. 外层循环是竖. 内层循环是横. for, do...while, while的选择: 如果有固定次数,如阶乘! ,判断素数,用 fo ...

  7. 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构

    1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...

  8. 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识

    正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第7章_函数

    函数执行,从右到左执行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> main() ...

随机推荐

  1. QT下的几种透明效果(三种方法:调色板,透明度属性,自绘)

    1.窗口整体透明,但是窗体上的控件不透明.    通过设置窗体的背景色来实现,将背景色设置为全透.  QPalette pal = palette();  pal.setColor(QPalette: ...

  2. QT:窗口最小化时显示一个小浮标

    有些窗口在自身最小化时要在桌面上显示一个小浮标,让用户利用这个小浮标进行各种操作(例如迅雷的悬浮窗一样),我试着用QT实现一下这个功能. PS:本来以为这个功能很简单,却搞了我两个晚上,泪奔... 思 ...

  3. 在 Inno Setup 中实现倒数N秒后激活按钮

    原文 http://restools.hanzify.org/article.asp?id=67 timectrl.dll 为一个 6.5 KB 的按钮激活时间控制插件.  引用来自 Example1 ...

  4. AspectJ教学

    这几天看JAVA基础看的有点头疼,决定时不时的换换口味,准备開始调研一些如今流行的技术,于是,開始埋头思考自己知识的盲区(当时,自己的知识盲区茫茫多...),想了几天后,决定要開始研究一下几种技术及实 ...

  5. jquery的clone办法bug修复

    发现测试,textarea和select的jquery的clone有问题的方法,textarea和select值clone时间会输.这是发现jquery一个bug,上不了的能够看下代码.比較简单.就是 ...

  6. ORACLE 热备begin backup / end backup

    执行begin backup之后,oracle会把将要备份的数据文件都标记为hot-backup-in-progress,锁定所要备份的datafile header的scn,例如此时scn=100, ...

  7. LinQ学习手册

    LinQ : Language Integrated Query(语言集成查询); 1.以统一方式操作各种数据源,减少数据访问的复杂性. 优点在于封装了SQL语句,只对对象进行操作(增删改查),代码量 ...

  8. 02js高级Function

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. zendStudio安装Xdebug项目断点调试

    1,首先安装xdebug插件 传送门 2,配置php.ini文件如下: [XDebug] xdebug.profiler_append = xdebug.profiler_enable = xdebu ...

  10. linux自旋锁

    一.前言 在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那么可以考虑使用semaphore或者mutex的锁机 ...