A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 408205555 中级黑马   /  2015-7-21 18:24  /  458 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 408205555 于 2015-7-21 18:28 编辑

看了一天字符串的视频。。边看边记,终于整理出来了。同大家分享一下。
--------------------------------------------------------------------------------
概念:
字符串是位于双引号中的字符序列。
在内存中以”\0”结束,所占字节比实际多一个。
* C语言中没有字符串变量,可以用字符数组来存放字符串。
例:char cr[10]=”abcd”;
注意:可以把一个字符常量赋给字符变量,但不能把字符串常量赋给字符变量。
字符数组定义:
(1)一维字符数组(用来存储字符的数组)定义
数据类型  数组名 [数组长度];
char ch[5];
char ch[5+2];
int len=4;  char ch[len];
char ch[M+2];        //M是宏定义字符
(2)二维字符数组定义
char arr[4][10];        //存储40个字节
初始化:
(1)定义的同时进行初始化
char ch[5]={‘a’,’b’,’c’,’e’,’f’};
char ch[]={};
char ch[3]={‘a’};                //a \0 \0
char ch[5]={[3]=’b’};
(2)先定义后初始化
char ch[3]; ch[0]=’a’; ch[1]=’b’; ch[2]=’c’;
用字符数组保存字符串:
//第一种初始化方法
char str={“abc”};
str[0] = a;
str[1] = b;
str[2] = c;
//第二种初始化方法
char str[4]=”abc”;                        //长度必须>=4
字符串的输入和输出:
        输出:
%s 从给定的地址开始,输出字符直到遇到\0结束
printf(“%s\n”,str);
printf(“%s\n”,&str[0]);
输入:
//从键盘上接收一个字符串,保存在以str为首地址的字符数组中
scanf(“%s”,str);
//注意点:如果以%s格式进行输入的话,注意空格问题
//如果字符串有空格,则空格之后的字符无法被接收保存
//(以%s的格式输入,scanf遇到了空格,就结束了)
//2、输入的字符串的长度要小于数组的长度
字符串结束符的使用:
\0
字符串长度的计算方法:
(1)使用字符串函数strlen();,strlen()方法计算的长度不包含\0
(2)以\0作为条件,进行判断,遇到\0就结束,\0之前就是字符串长度
char str[]=”dfasdfdsgfdgsdfs”;
int i=1;
while(str[i-1]!=’\0’){
i++;
}
例:查找字符在字符串中首次出现的位置
char str[]="jlkjdasjfasnh";
char ch='a';
for(int i=0;str!='\0';i++){
        if(str==ch){
                return i;
        }else{
                return -1;
        }
}
字符串处理函数(一)
除了使用输入输出函数,使用其他函数应使用头文件’string.h’
使用puts和gets必须包含头文件stdio.h
(1)字符串输出函数:puts()
//puts函数可以自动换行
//()内也可以是数组元素的首地址
puts(字符数组地址);
(2)字符串输入函数:gets()
原来接收一个字符串:
char str[100];
////输入数据时不能有空格,一旦输入空格,scanf输入会停止。
Scanf(“%s”,str);        
使用gets()方法
//使用gets会给出一个警告
//不安全:数组长度是100,但是如果你输入了120个字符,存在越界问题
gets(str1);                //输入时可以有空格
(3)字符串链接函数:strcat(oldstr,newstr)
解释:把两个字符串链接成一个字符串
  strcat(A,B); 把字符串B链接到A后面去
                           Oldstr的长度要足够,只要能够保存下oldstr+newstr。
  newstr会把oldstr的最后一个字符\0给覆盖了。
例子:
char str1[100]=”fdasfasdfs”;
char str2[]=”aaaaa”;
strcat(str1,str2);
puts(str1);
(4)字符串拷贝函数:strcpy()
strcpy(oldstr,newstr);
解释:把newstr拷贝到oldstr中,newstr会覆盖掉oldstr中的内容
  Str1要足够大,否则可能会越界
例子:char str1[100]=”aaaaaa”;
  char str2[]=”bbbbbb”;
  strcpy(str1,str2);
(5)字符串比较函数:strcmp()
strcmp(str1,str2);
解释(规则):比较字符的ASCII码值。比较在字典中出现的顺序。
函数有返回值,返回值>0,则str1>str2。返回值<0,则str1<str2。
如果返回值=0,则str1=str2。
例子:abc与aac做比较,abc会比aac大。因为b的ASCII码值比a的大。
(6)测字符串长度函数:strlen()
//strlen()方法测试出来的函数长度不包含\0
strlen(str2);
需求:单词首字母大写并且统计单词个数,单词以空格分隔
void main(){        int words=0;      //定义变量,用作标记
        int count=0;      //定义变量,用作记录单词的个数
        char str[100];    //定义字符串,用于保存用户输入的单词
        //提示用户输入
        printf("请输入单词,以空格分隔\n");
        //输入单词
        gets(str);
        for(int i=0;i<strlen(str);i++){
                if(str==' '){                                //如果是空格
                        words=0;                          //则标记为0
                }else if(words == 0){               //如果标记是0,则证明本次循环是单词的第一个首字母
                        count++;                         //是单词当然要+1
                        str=str-32;                        //小写字母-32=大写字母(详见ASCII码)
                        words=1;                         //标记为1
                }
        }
        puts(str);
}

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马