码迷,mamicode.com
首页 > 其他好文 > 详细

字符串

时间:2015-11-23 06:11:22      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

1、字符串常量、变量:

  字符串常量(也叫字符串字面量),是用双引号扩起来的字符序列。如:

1 ”Hello World”
2 ”I\’m a string literal.”
3 ”He was called \“The NO.1\”” //等等。(注意字符串中可能存在的转义序列)

  存储字符串:

  在C语言中,没有专门的字符串类型,通常使用字符数组来存放字符串;通常情况下,在不赋值的时候,字符数组中各个元素默认值为’\0’;在存储字符串时最好以空字符’\0’结尾。

  字符串变量:

  当声明用于存放字符串的字符数组时,始终要保证字符数组的长度比字符串的长度多一个字符,因为C语言规定每个字符串都要以空字符’\0’结尾。如果没有为空字符预留位置,可能会导致程序运行时出现不可预知的结果。系统字符串函数都是假设字符串是以空字符结束的。【我们可以规定一个字符串的长度,那么声明字符数组的长度就是这个规定长度+1(至少能存入字符串并能保存结尾空字符’\0’),至于字符串里最终存了多少字符,可以通过确定空字符’\0’的位置来确定】

  初始化字符串变量:

1 char s[12] = {‘H’,’e’,’l’,’l’,’o’,’ ’,’W’,’o’,’r’,’l’,’d’,’\0’};
2 
3 char s[12] = “Hello World”; //最后一位空字符’\0’结尾
4 
5 char s[] = “Hello World”; //声明时忽略长度,编译器根据字符串长度自动分配空间(常用于字符串很长的情况)

  C语言允许使用char *指针变量指向一个字符串:

1 char s[] = “Hello World”; //声明为字符数组
2 
3 //char *s = s;
4 
5 char *s = “Hello World”; //声明为字符指针,指针指向了H的首地址。

  以上两种声明字符串的形式都可以,但是二者是有区别的:

  1??声明为数组时,s为数组名(首地址),可以修改数组中的元素字符;

  2??声明为指针时,s为指针变量,不可以直接修改指针变量内容(地址),除非指向其他字符串;

  3??如果需要修改字符串内容,那么我们就建立字符数组来存储字符串;字符指针变量并不会为字符串分配空间,他只能指向一个字符数组或者一个字符串常量;

2、字符串的输入输出:

  • scanf()、printf()
  • gets()、puts()
  • 通过数组访问、指针访问方式,读取、访问字符串中的字符

  //printf可以输出多个字符串,puts每次只能输出一个字符串,并且自动换行.

  字符串输入scanf  gets的区别:

  相同:输入结束以后自动在结尾加\0。

  不同:scanf可以接受多个字符串,gets只可以接受一个字符串;gets可以接受空格、tab键。

3、C语言字符串库函数(#include <string.h>):

  • strlen():求字符串长度
  • strcpy():字符串拷贝
  • strcat():字符串拼接
  • strcmp():字符串ASCII顺序比较
 1 //strlen():求字符串长度
 2 char a[10] = {x,y,\0};
 3 printf("%d\n",strlen(a));
 4 
 5 //strcpy():字符串拷贝
 6 char a[10];
 7 char b[] = "LKH";
 8 printf("%s\n",strcpy(a,b));
 9 printf("a = %s\n",a);
10 
11 //strcat():字符串拼接
12 char b[] = "LKH";
13 strcat(b,"abc");
14 printf("%s\n",b);
15 
16 //strcmp():字符串ASCII顺序比较,比较两个字符串是否一样。
17 char b[] = "khl";
18 char a[] = "lkh";
19 printf("%d\n",strcmp(b,a));

  注:字符串常量就是字符数组;字符串的内部表示使用一个空字符’\0’作为串的结尾,因此存储字符串的物理存储单元数比括在双引号中的字符数多一个。C语言对字符串的长度没有限制,但程序必须扫描完整个字符串后才能确定字符串的长度;标准库函数strlen(s)可以返回字符串参数s的长度,但长度不包括末尾的’\0’。

  比较规则讲解:http://blog.csdn.net/wgenek/article/details/7257435

4、字符串数组:

对于字符串数组的存储:

char planets[][8] = {“Mercury”,”Venus”,”Earch”,”Mars”,”Jupiter”,”Saturn”,”Uranus”,”Neptune”,”pluto”};

  技术分享

  以这种方式存储是比较浪费空间的;而以字符指针数组的方式存储相对来说会更好些:

char *planets[9] = {“Mercury”,”Venus”,”Earch”,”Mars”,”Jupiter”,”Saturn”,”Uranus”,”Neptune”,”pluto”};

  技术分享

5、指针和字符串:

 1 //指针和字符串
 2 void test6()
 3 {
 4     //指针遍历字符串的元素
 5     char a[4] = "lkh";
 6     for(int i = 0;i<4;i++)
 7     {
 8         printf("%c\n",a[i]);
 9     }
10     char *p = a;
11     for (; *p!= \0; p++) {
12         printf("%c\n",*p);
13     }
14 }
15 
16 //指针指向字符串
17 void test7()
18 {
19     char *b = "Lmj";
20 //    char *p ;
21 //    *p = "like";   //这种写法是错误的
22     printf("%s\n",b);
23 }

 

字符串

标签:

原文地址:http://www.cnblogs.com/CJDog/p/4987276.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!