第八章字符串

8.1字符串的定义与初始化

1.用字符数组初始化

//1.用字符数组初始化
int main()
{char ch[12];char ch2[12]={'H','e','l','l','o',',','W','o','r','l','d','!'};//如果元素的个数小于字符串长度后面会自动初始化空字符'\0'char ch3[12]={'H','e','l','l','o'};//同样可以缺省数组长度char ch4[]={'H','e','l','l','o',',','W','o','r','l','d','!'};ch[0]='H';ch[1]='e';ch[2]='l';ch[3]='l';ch[4]='o';ch[5]=',';ch[6]='W';ch[7]='o';ch[8]='r';ch[9]='l';ch[10]='d';ch[11]='!';    printf("ch:%s\nch2:%s\nch3:%s\nch4:%s\n",ch,ch2,ch3,ch4);
}//令人不解的是ch4为什么会多出一个hello来

运行结果:

2.用字符串常量初始化

#include<stdio.h>
void main()
{char ch1[14]={"Programing!"};char ch2[14]="Programing!";char ch3[]={"Programing!"};char ch4[]="Programing!";printf("ch1:%s\nch2:%s\nch3:%s\nch4:%s\n",ch1,ch2,ch3,ch4);
}

运行结果:

3.字符数组和字符串的区别
两者不是同一个概念,只是在C语言中,用字符数组来处理字符串

void main()
{int i;char ch[12]={'H','e','l','l','o',',','W','o','r','l','d','!'};//这样打印会出错printf("ch:%s\n",ch);for(i=0;i<12;i++)printf("%c",ch[i]);printf("\n");
}

运行结果:

8.2字符串的常用操作

8.2.1字符串的输入输出

方法1:用%c逐字输入/输出

void main()
{int i;char ch[12];for(i=0;i<12;i++)scanf("%c",&ch[i]);for(i=0;i<12;i++)printf("%c",ch[i]);printf("\n");
}

输入Hello,World!
运行结果:

方法2:用%s整体输入/输出

void main()
{char str_a[10],str_b[10];scanf("%s%s",str_a,str_b);printf("%s\t%s \n",str_a,str_b);
}

输入 How are you运行结果

提示:用%s的形式输入字符串时,字符串中不能出现空格,回车符和制表符,因为它们都是scanf默认的输入分隔符

3.用系统提供的gets和puts函数

void main()
{char str_a[10];gets(str_a);puts(str_a);
}

输入 How are you运行结果:

8.2.2指向字符串的指针

/根据字符串的首地址来引用一个字符串,这样的指针称为字符串指针
void main()
{char *ps;ps="Programing!";puts(ps);ps="Hello,World!";puts(ps);
}

运行结果:

注意:ch1是指针常量,不可以这样赋值
char ch1[14]={“Hello World!”};
ch1=Programing!";

Example8.2
运用字符串指针遍历字符串,统计字母、空格、数字出现次数

void main()
{int character=0,digit=0,space=0,other=0;char *p="Hello!",s[20];puts(p);p=s;printf("input string:\n");gets(p);while(*p!='\0'){if(('A'<=*p && *p<='Z') ||('a'<=*p && *p<='z'))++character;else if(*p==' ')++space;else if((*p<='9')&&(*p>='0'))++digit;else ++other;p++;}printf("character:%d\nspace:%d\ndigit:%d\nother:%d\n",character,space,digit,other);
}

运行结果:

Example8.3 利用二维数组读入输出多个字符串

void main()
{char a[5][7];int i;for(i=0;i<5;i++)gets(a[i]);for(i=0;i<5;i++)puts(a[i]);return 0;
}

输入File<回车>Edit<回车>View<回车>Run<回车>Tools<回车>运行结果

8.2.3字符串处理的常用函数

unsigned int strlen(const char *str);
char *strcpy(char *destination,const char *source);
char *strcat(char *destination,const char *source);
int strcmp(const char *str1,const char *str2);
char *strupr(char *str);
char *strlwr(char *str);

8.3应用举例

8.3.1回文判断

#include<stdio.h>
#include<string.h>
#define MAX 80int Palindrome(const char *str);
void main()
{char str[MAX],ch;do{printf("Input a string:\n");gets(str);if(Palindrome(str))printf("It is a palindrome\n");else printf("It is not a palidrome\n");printf("continue?(Y/N)\n");ch=getchar();getchar();}while(ch=='y'||ch=='Y');
}int Palindrome(const char *str)
{int i=0,j=strlen(str)-1;while(i<j){while(str[i]==32)i++;while(str[j]==32)j--;if(str[j]==str[i]){i++;j--;}else return 0;}return 1;
}

8.3.2统计单词出现次数

#include<stdio.h>
#include<string.h>int search(const char *ps,const char *pf)
{int count=0,i=0;char dest[20];while(*ps){i=0;while((*ps>='a' && *ps<='z') || (*ps>='A' && *ps<='Z')){dest[i++]=*ps++;}dest[i]='\0';ps++;if(strcmp(dest,pf)==0)count++;}return count;
}void main()
{char source[200];char key[15];puts("Input the source sentence:");gets(source);puts("Input the key word:");gets(key);printf("There are %d key words in the sentence.\n",search(source,key));
}

运行结果

8.3.3密码问题

#include<stdio.h>
#include<string.h>int check(char *ps)
{char passwd[]="LOVEYOU";     //设定密码int i=0;int flag=1;for(;*ps!='\0' && flag;ps++){if(*ps>'a' && *ps<'z')*ps=*ps-32+2;      //解密规则if(*ps!=passwd[i])flag=0;elsei++;}return flag;
}void main()
{char str[10];int i=0;printf("input your password:\n");while((str[i]=getchar())!='#'){i++;}str[i]='\0';if(check(str))printf("Pass!\n");else printf("Error!\n \a \a \a");
}

运行结果:

8.3.4字符串的排序

方法一:用一维数组实现

#include<stdio.h>
#include<string.h>void sort(char *str[],int n)
{char *temp;int i,j,k;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(str[k],str[j])>0)k=j;if(k!=i){temp=str[i];str[i]=str[k];str[k]=temp;}}
}void main()
{char *pstring[4]={"FORTRAN","PASCAL","BASIC","C"};int i,nNum=4;sort(pstring,nNum);for(i=0;i<nNum;i++)printf("%s\n",pstring[i]);return 0;
}

运行结果:

方法二:用二维数组实现

#include<stdio.h>
#include<string.h>void sort(char (*str)[10],int n)
{char temp[20];int i,j,k;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(str[k],str[j])>0)k=j;if(k!=i){strcpy(temp,str[i]);strcpy(str[i],str[k]);strcpy(str[k],temp);}}
}void main()
{char string[][10]={"FORTRAN","PASCAL","BASIC","C"};int i,nNum=4;sort(string,nNum);for(i=0;i<nNum;i++)printf("%s\n",string[i]);
}

运行结果:

8.4带参数的main函数


int main(int argc,char **argv)
{int i;for(i=1;i<argc;i++)printf("%8s",argv[i]);printf("\n");return 0;
}


C语言程序设计 第八章字符串相关推荐

  1. c语言第八章函数程序设计,C语言程序设计-第八章 函数.ppt

    C语言程序设计-第八章 函数 函数分类(从用户使用角度 ) 1.标准函数(库函数,由系统提供 ): 例如:printf 函数 .sqrt函数. 2.用户自定义函数: 例如,上面程序中的max 函数. ...

  2. 林军c语言程序设计第八章,林军主编《C语言程序设计》课后参考答案第一二章.doc...

    林军主编<C语言程序设计>课后参考答案第一二章 习题七 填空题 1.'\0' 2一组(.多个)相同类型数据 多组相同类型数据 3. gets puts 4.字符串所含有字符的个数 5.58 ...

  3. 何钦铭c语言程序设计第八章,C语言程序设计(第3版)何钦铭颜晖第8章指针

    <C语言程序设计(第3版)何钦铭颜晖第8章指针>由会员分享,可在线阅读,更多相关<C语言程序设计(第3版)何钦铭颜晖第8章指针(16页珍藏版)>请在人人文库网上搜索. 1.第8 ...

  4. 何钦铭c语言程序设计第八章,c语言程序设计(第3版)何钦铭-颜-晖-第8章--指针

    1.第8章 指针[练习8-1]如果有定义"int m, n = 5, *p = &m;"与m = n等价的语句是 B .A m = *p; B. *p = *&n; ...

  5. c语言用define预处理命令定义,C语言程序设计第八章预处理命令..doc

    一.?选择题1.?对宏命令的处理是_ ___A.?在程序执行时进行的B.?在对程序中其他语句进行编译前进行的C.?在程序连接时进行的D.?与程序中其他语句同时进行编译2.?下面对编译预处理的叙述正确的 ...

  6. C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr

    模拟实现字符串和内存操作函数(一)目录: strlen strcpy strcat strcmp strstr strchr strlen size_t strlen(const char* str) ...

  7. c语言字符串文库总结,C语言程序设计入门:字符串函数

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...

  8. Python 语言程序设计(3-1)字符串处理函数和相关功能

    关于如何进行函数编写 最简单的一个问题 365天,每天进步0.01,一年后取得的成就和365天,只有在工作日进步,休息日不进步,且倒退0.1的人相比,工作日努力的参数应该是多少? #DaydayupQ ...

  9. c语言程序设计字符组,C语言程序设计入门:字符串

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...

  10. C语言程序设计第十章字符串,C语言程序设计(字符串)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char buf[40] = ...

最新文章

  1. python中if else语句用法_python中if及if-else如何使用
  2. Unity3D开发赛车Demo遇到的问题
  3. 前端一HTML:十一:其他选择器
  4. openresty开发系列17--lua中的正则表达式
  5. 计算机系统基础:数字的机器表示
  6. 二进制搜索树_将排序的数组转换为二进制搜索树
  7. 新站如何在两个月之内冲到百度首页
  8. 使用ShowDoc在线管理API接口文档
  9. Google map根据经纬度获取地址信息
  10. 图片放大后不清楚怎么办?
  11. ppt模板如何制作个性人物海报?
  12. mysql复制数据到同一张表
  13. 这是一个全民销售的时代
  14. linux 下的程序格式,linux 下软件安装包的格式有哪些?
  15. Console线连接交换机路由器等设备
  16. The Sandbox 上线 mSAND-MATIC 质押功能
  17. 知识付费创业目前怎么样?需要做什么?
  18. UDP攻击是什么意思?UDP攻击防范措施
  19. matlab 自动发邮件,matlab实现发邮件
  20. 写一个网页,支持10国语言便捷切换

热门文章

  1. 常见URL字符及URL编码值
  2. JupyterHub与OpenLDAP集成
  3. 大数据表转移hdfs后查询处理
  4. C++--第2课 - C++中的引用
  5. 元组-不仅仅是不可变的列表
  6. 使用Zephir来快速编写高性能PHP二进制拓展
  7. Swift iOS : plist
  8. 给为工作而焦急迷茫的你
  9. /var/spool/clientmqueue/下的大文件
  10. IIS建立两个站点服务,只有一个公网IP