黑马程序员——c语言基础:字符串

来源:互联网 发布:tcl42寸网络电视 编辑:程序博客网 时间:2024/05/22 08:22

1.字符串的基本概念和使用


 1.1.字符串的概念:字符串是位于双引号中的字符序列,在内存中一“\0”结束,所占字节比实际多一个

 注意:

 1)可以把一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量。

 2C语言中没有字符串变量,可以用字符数组来存放字符串。

 

 1.2.用字符数组保存字符串:

 方法1char str1[4] = {"abc"};

 方法2char str2[4] = "a,b,c";

 

 1.3.字符串的输入输出:

   使用的格式字符串为“%s”,表示输入、输出的是一个字符串。

    3.1%s输出字符串:printf("%s",ch1); // 输出原理:从给定的地址开始,输出字符直到遇到\0结束。

    3.2%s输入字符串:scanc("%s",ch1); // 从键盘上接收一个字符串,保存在以ch1为首地址的字符数组中。

       注意:1)如果输入的字符串有空格,则空格之后的字符无法被接收保存。

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


 1.4.字符串长度的计算方法

    1)使用字符串函数:strllen(str1);

    2)以'/0'作为判断条件,遇到‘\0'就结束,\0之前的就是字符串的长度。


实例:字符数组的初始化和输入输出。

#include <stdio.h>


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

    

    //定义并初始化一个字符数组

    char ch[] ="Do you want join itheima?\n";

    

    // %s输出字符串

   printf("%s",ch);

    

    //定义变量,接收字符串

   char ch1[10];

    

    //从键盘接收一个字符串

   scanf("%s", ch1);

    

    // 输出字符串

   printf("%s", ch1);

   return 0;

}


2.字符串基本应用实例

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

#include <stdio.h>


// 定义函数,返回某字符在字符串中首次出现的位置,如果字符串中不包含该字符,则返回-1

int charPosition(char ch,char str[]){

   int i = 0;

   while (str[i] != ch) {

       if (str[i] == '\0') {

           return -1;

        }

        i ++;

    }

   return i;

}

int charPosition2(char key,char str[]){

    // 先遍历字符串

   for (int i =0; str[i] != '\0'; i ++) {

       if (str[i] == key) { // 如果str[i]等于key

           return i; // 返回i

        }

    }

    return -1;// 如果字符串中不包含key,返回-1

}

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

    

    //定义并初始化一个字符串

    char str[] ="I want join it heima!";

    

    //判断字符串是否包含某个字符

   printf("%d",charPosition2('I', str));

    

   return 0;

}



3.字符串函数的使用:

 

 puts() 输出一个字符串,并且自动换行,参数可以是字符数组名,也可以是字符元素的地址。

 gets() 输入一个字符串,会给出一个不安全警告,可以接收空格

 

 strcat()连接两个字符串

    strcat(A,B); //把字符串B连接到A的后面,但要保证A的长度足够保存下B,否则会越界。

 

 strcpy字符串拷贝函数

    strcpy(oldStr, newStr); //newStr拷贝到oldStr中,newStr会覆盖掉oldStr中的内容,oldStr要足够大,否则会越界。

 

 strcmp字符串比较函数

    strcmp(str1, str2); //比较str1str2的大小,比较规则:从左到右逐个比较两个字符串中的字符,当两字符串中同一下标的两个字符不同时,返回两字符的ASCII码的差。

 

 strlen字符串的长度计算函数

    strlen(str); //计算str的长度(不包含‘\0’

注意:

使用putsgets必须包含头文件stdio.h 

使用strcat,strcpy,strcmp,strlen需要包含string.h的头文件


应用举例:


#include <stdio.h>

#include <string.h>


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

    // 定义两个字符串

   char str1[100];

   char str2[100];

    

    // 输入一个字符串

    printf("请输入第一个字符串:\n");

   gets(str1);

    

    // 输出一个字符串

    printf("你输入的第一个字符串是:\n");

   puts(str1);

    

    //再输入一个字符串

    printf("请输入第二个字符串:\n");

   gets(str2);

    

    //连接两个字符串并输出

    printf("连接两个字符串:\n");

   puts(strcat(str1, str2));

    

    //将一个字符串拷贝到另一个字符串中并输出

    printf("将第二个字符串拷贝都第一个字符串中:\n");

   puts(strcpy(str1, str2));

    

    // 比较两个字符串

    printf("第一个字符串与第二个字符串相比较: ");

   printf("%d\n",strcmp(str1, str2));

    

    //计算字符串的长度

    printf("第一个字符串的长度是:%lu\n",strlen(str1));

    

   return 0;

}


4.字符串例题:使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词,并将每个单词的首字母转换成大写。

#include <stdio.h>


// 定义函数,将字母转换成大写

char upper(char ch){

    //判断传人的字符是不是小写字母

   if (ch >= 'a' && ch <='z') {

        //如果是小写字母,则转换成大写

        ch = ch -32;

    } //如果不是小写字母,则不作处理

   return ch;

}


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

    //定义一个字符串数组

   char str[100];

    

    // 输入一个字符串

   gets(str);

    

    //定义变量,存储单词数

   int count = 0;

    

    //如果输入不为空,即第一个元素不为‘\0’

   if (str[0] !='\0') {

        count ++;// 则至少有1个单词

        str[0] =upper(str[0]);// 如果str[0]是小写字母,则转换为大写

    }

    

    // for循环从首元素开始,遇到‘\0’结束

   for (int i =0; str[i] != '\0'; i ++) {

       if (str[i] == ' ' && str[i +1] != ' ' && str[i +1] != '\0') {// 如果str[i]是空格,str[i + 1]不是空格和'\0'

            count ++;// 则单词数+1

            str[i +1] = upper(str[i +1]); // str[i + 1]转换成大写

        }

    }

    

    // 输出单词数量

   printf("输入了%d个单词\n", count);

    

    //输出转换后的字符串

    printf("将单词的首字母转换成大写后的字符串为:\n");

   puts(str);

    

   return 0;

}



0 0