您的位置:首页 > 编程语言 > C语言/C++

黑马程序员------C语言基础 字符串

2015-07-22 22:23 246 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

字符串

1 字符串的概念

字符串是位于双引号的字符序列,在内存中以'\0'结束所占字节比实际多一个。

1>c语言中没有字符串变量,可以用字符数组来存放字符串

2>可以吧一个字符常量赋值给一个字符变量,单不能把字符串赋值给字符变量

2 字符数组的定义

形式与数组数组相同

1>一维字符串数组

char 数组名[常量表达式]

char a[5]

char a[5+3]

int len ;

char a[len]

也可以使用宏定义 # define M 2

char a[M];

2> 二维字符串数组

char a[2][3];

3 字符数组的初始化

1>定义数组的同时进行初始化

char a[5]={'a','b','c','e','f'};

char a[] = {'a','b','c','e','f'};

char a[3]={'a'};// a\0\0

char a[5]={[3]='b'};

2>先定义后初始化

char ch[3];

ch[0]=‘d’;

ch[1]='c';

4>字符数组的遍历

char [n];

for (int i =0;i<n;i++){

printf("%c\t",ch[i]);

}

4字符数组涌来保存字符串的

字符数组作用

1)保存字符串 char str[10]={"halloworld"};

2)保存字符

字数组保存字符串,

第一种初始化方法

char str[4]={"abc"};

str[0]='a';str[1]='b';str[2]='c';str[c]='\0'

第二种初始化方法

char str2[4]="abc"; 这里直接包含\0 所以数组的长度是4

字符串的输出与输入

把一个字符数组,用%s输出

char ch[10]={'a','b','c','d','\0'}

用%s接收一个字符串

char str[];

5 以%s的形式输入和输出字符串

使用%s表示的输入/输出的是一个字符串。

%c 我门要查看的是一个字符串,每次打印的事一个字符。

char str[10]="hahais"

for(int i=0;i<10;i++){

printf("%c",str[i]);

}

用%s从给定地址开始,输出字符直到遇到\0结束 这样可以用prinf和scanf一次输入一个字符串。

把一个数组用%s输出

char str[3]={'a','b','\0'};

printf("%s",str);

从键盘上输入一个字符串

char str1[10];

scanf("%s",str1);

注意点:

1》用%s格式进行输出的话,注意空格问题

如果输入的字符串友空格,课空格无法被接受收保存

以%s的格式输入,scanf遇到了空格,就结束了

2》输入的字符串的长度要小于数组的长度

6字符串结束的使用

char a[]={'a','b','c','d','\0'};

char b[]={'x','y'};

printf(%s,b);//这里 答应出来的事xyabcd,就是应为没有加\0

在初始化对方法下后面要手动加‘\0’否则会出现乱码或者不是我们想要的

7.字符串长度的计算

1》使用字符串函数 strlen(str);

2》以'\0'作为条件,进行判断遇,遇到\0就结束

不知道数组的长度下计算字符串长度

//不指定字符串长度的初始化(要循环的次数),所以可以使用while

char ch[]="acd";

int i=1;

while(ch[i-1]='\0'){

i++;

}

printf("长度:%d\n",i);

判断字符串中是否包含某个字符 如果包含 返回首次出现的位置。否则

返回-1.

8 字符数组

字符数组实际上和普通数组没有什么区别

数组类型的含义:数据类型的事数组所包含的元素都是类型,而不是数组名的类型数组名永远是一个指针,指向第一个元素到之地,即数组地址

9.字符串处理函数

1》字符串输出函数puts 头文件stdio.h

1.puts函数可以自动换行

2.也可以不是数组的首地址,可以是元素地址

3.必须是字符数组

4不可以格式化输出

puts(str);

2》字符串输入函数gets 头文件stdio.h

使用gets会给出一个警告

1)warning :this program uses gets() ,which is unsafe.

2)不安全:数组长度是100,但如果你输入了120个字符,会存在越界问题

3)使用gets可以接受空格

3》字符串链接函数strcat(); 使用时的头文件string.h

链接一个字符串,把两个字符串链接成一个字符串

oldstr ,newstr,两个字符串

1)strcat(oldstr,newstr); nwestr把oldstr的最后一个字符\0覆盖了拼接到oldstr。后面

2)oldstr的长度有足够,能确保保存old+newstr

4》字符串拷贝函数:strcpy 引入头文件string.h

strcpy(oldstr,newstr);

把newstr拷贝到oldstr中,newstr会覆盖掉oldstr

5》strcmp 比较两个字符串大小

abc

def 大 规则:比较字符的aascii码值,比较字啊字典中出现的顺序

比较过程,逐个取两个字符串的字符对应位相比较,从第一位不同的开始,就能确定字符串大小

strcmp(str1,str2) 函数有返回值 >0 str1>str2

<0 str1 < str2

==0 str1 = str2

练习计算单词个数 ,同时让首字母大写
#include <stdio.h>

int main(int argc, const char * argv[]) {
char ch[100];//定义一个变量存储字符串
printf("请输入一个字符串\n");
gets(ch);
int word=0;
int count=0;
//循环取出每个字节,遇到\0循环结束
for(int i=0;ch[i]!='\0';i++){
if (ch[i] == ' ') {
//是否是单词标记下
word = 0;
}else if(word == 0){
//当前循环 字符是空格 下一次循环一定是单词
count++;
word =1;// 让单词标志变为不是单词
ch[i]=ch[1]-32;

}

}
printf("%s\n",ch);
printf("单词的个数是%d",count);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: