黑马程序员技术交流社区

标题: C语言字符串笔记 [打印本页]

作者: 八寒地狱    时间: 2014-10-21 19:12
标题: C语言字符串笔记
一  字符串
  1 字符串 是位于双引号中的字符序列 在内存中以“\0”结束,所占字节比四级多一个
  2  注意点 可以吧一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量 C语言中没有字符串变量 可以用字符数组来存放变量

字符数组
1 用来存放字符量的数组
2 字符数组定义 char 数组名[变量表达式]  李二 char c[5];
也可以是二维或多维数组   char 数组名[常量表达式][变量表达式]
定义字符数组时,应该确保数组长度比字符串长度至少多1
3 字符数组初始化
可以在定义时初始化
  char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'};  字符数组和其他的整形数组一样,当我们一旦给数组部分初始化了
       剩下没有初始化的部分也都是0  以%s格式进行输入的时候,输入的时候,不能输入空格
如果输入了空格,认为此次输入结束,scanf退出
4 字符数组引用也是通过下标引用
  5  访问方式
   1)访问单个字符
         printf("%c",c[0]);
    2)以字符串的形式输出
         char c[5]="asbc";
         printf("%s",c);

6 存储原理
    字符数组在内存中存储的原理
      1)计算机分配连续的内存空间
      2)字符串的第一个字符存放到地地址中
      3)字符数组的每一个字符占用1个字节
       char c1[6];
      int len = sizeof(c1)/sizeof(char);
              = sizeof(c1);

    小练习
查询某个字符在字符串中首次出现的位置
int getCharIndex(char c1[],char c){


    int i=0;
    while (c1[i]!='\0') {
        
        if (c1[i]==c) {
            return i;
        }
        i++;
    }

    return -1;
}

int main(int argc, const char * argv[])
{

    //定义一个数组
    char c[]="asfakfasdfasf";
    int index = getCharIndex(c,'k');
    printf("%d\n",index);
   
    return 0;
}

常见的字符串函数
1、puts()  输出的函数,输出内容到输出的缓冲区
    printf("Hello, World!\n");
    fflush(stdout);  //强制刷新缓冲区
    puts可以帮我们自动换行
    puts("hello world!");
     char ch[]="asdfasfasfasf";
    puts(ch);
    puts的缺点是不能格式化输出
   
   
    2、gets() 获取用户从键盘上输入的内容
    优点:可以从键盘接收含空格的字符串
    注意:warning: this program uses gets(), which is unsafe.
    gets()是不安全的
    char ch3[10];//当输入的内容超出了数组的长度,gets()会在数组中放10个字符,但是没有'\0'
    char ch1[10];
    获取内容,从键盘上
    gets(ch1);
    输出内容
    puts(ch1);
   
   
    3、strcat 字符串连接函数
    char oldStr[40]="welcome to ";
    char newStr[10];
    gets(newStr); //接收用户输入的内容
    把newStr连接到oldStr最后,newStr会覆盖oldStr的'\0'
   strcat(oldStr,newStr); //进行字符串的连接
    puts(oldStr);
   
    4、strcpy 字符串的拷贝函数
    char oldStr[40]="welcome to ";
   char newStr[10];
    gets(newStr);
    把newStr的内容拷贝到oldStr中,会覆盖oldStr中的内容
    strcpy(oldStr,newStr);
    puts(oldStr);
   
    5、strcmp 字符串的比较函数
   
    char oldStr[10]="abcde";
    char newStr[10];
    strcmp(oldStr,newStr) 逐个比较字符的ascii码值
    返回值>0 表示oldStr>newStr
    返回值<0 表示oldStr<newStr
    返回值=0 表示oldStr==newStr
   
   
    gets(newStr);
    if (strcmp(oldStr,newStr)>0) {
        puts("你输入的字符串小了");
   }else if(strcmp(oldStr,newStr)<0){
   
        puts("你输入的字符串大了");
    }else{
      
        puts("相等");
   
    }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2