********************* 字符串 *********************

这篇博客详细介绍了字符串在Java编程中的基础知识,包括字符数组的概念、定义、初始化、引用,以及如何以字符串形式进行输入输出。文章还讨论了字符串的结束符''的重要性和不当使用的影响,并探讨了字符串的长度计算以及常用的字符串处理函数,如puts、gets、strcat、strcpy和strcmp等。此外,还包含了关于二维字符数组的简单应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



字符串

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*

 

 

********************* 字符串的基本概念 *********************

 


 整型: 12   int

 

 实数型:

 2.3f  3.14    float  double

 

 字符常量

 

 'a' 'b'    char

 

 '\0'表示字符串的结束符

 

 

 字符串常量(用双引号括起来的)

 

 "a","ab",

 

 

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

 

 

 数组名是一个常量,不可以给常量赋值字符串

 

 

 ********************* 字符数组的定义 *********************

 

 

 char 数组名[常量表达式]

 

 

 char ch[10] ;字符数组用来存储字符,也可以用来存储字符串

 

 

 字符数组的格式

 

 一维:  char 数组名[常量表达式]

 char ch[10] ;

 

 二维:  char 数组名[常量表达式1][常量表达式2]

 

 char ch1[5][20];

 

********************* 字符数组初始化 *********************

 

 1> 定义的同时初始化

 

 

 完全初始化

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

 

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

 部分初始化

 

 char ch3[4]={'a','b'};

 char ch4[4]={[3]='c'};  // 0 0 0 c

 

 

 2> 先定义后初始化

 

 char ch5[5]; //没有初始化的时候,;里面的内容是随机的

 

 ch5[3]='c';

 

 使用字符数组来保存字符串

 

 char str[10]={"hello"}; //'h' 'e' 'l' 'l' 'o' '\0''\0''\0''\0'

 

 

 

 char str1[5]={"hello"}; //越界了

 

********************* 字符数组的引用 *********************

 

 通过下标法访问数组元素

 

 

 遍历

 

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

 

 printf....

 

 

********************* 以字符串的形式(字符数组)进行输入和输 *********************

 

 

 %c   逐个输出字符

 %s   表示输入.输出的是一个字符串

 从指定的地址开始,依次输出字符,直到遇到\0结束;

 

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

 

 printf("%s\n",str);

 

 printf("%s\n",&str[2]);//[2]开始打印.如果不是从第[0]

 打印需要取地址符&;

 

 正规书写

 

 char str2[]="abcd";

 

 printf("%s\n",str2);

 


 

 }

 

 

*********************  %s进行输入   *************************

 

 

 int num;

 scanf("%d",num); // 接收一个整数

 

 %c 接收一个字符

 

 scanf{"%d,%c,%d",&a,&ch,&b}; // ,等将%d%c%d隔开

 

 %s 接收一个字符串

 注意,%s进行输入的时候,字符串的中间不能有空格

 %s进行输入 遇到 空格 scanf 退出

 

 int str5[10];

 

 scanf("%s",str5);

 

 

 printf("---->%s\n",str5);

 

 

 

 *********************  字符串的结束符\0  ***********************

 

 char ch[10]="abc"; //字符数组长度  10

                    //字符串长度     4

                    //可见字符串长度  3

 

 1> %s输出的时候,不使用\0会造成多输出很多东西

 

 //定义字符数组

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

 //%s从指定的地址开始,输出字符,直到遇到\0结束

 printf("%s\n",str);

 

 

 2>不当的使用\0

 

 char str3[]="abcdeda\0fsdasdf";

 printf("%s\n",str);

 

 ********************* 内存分析 *********************

 

局部变量存在  栈区

 

 

内存从高地址向低地址分配

 

 

 ********************* 字符串的长度 *********************

 

 计算字符串的长度:

 '\0'作为结束条件,做循环

 如果我们取得的字符不是'\0',让计数变量+1

 //定义一个字符串

 

 char str[]="abc";

 

 //定义一个变量保存字符的个数

 int count = 0;

 

 判断是否到了字符串的末尾

 

 while(str[i] != 0){

    count++;

    ++i;

 }

 

 

 char str4[]="hello";

 

 printf("%lu\n",sizeof(str4));

 

  printf("%lu\n",sizeof(str4) / sizeof(char));

 

 


 

 

  ********************* 字符串处理函数  *********************

 

 

 

 用于输入输出的字符串函数需要包含头文件<stdio.h>

 其它字符串处理函数需要包含头文件<string.h>

 

 

 常见的字符串处理函数:

 

 字符串输出函数:  puts     把字符串输出到控制带

 字符串输入函数:  gets     从键盘接收一个字符串,保存到字符数组中

 字符串连接函数:  strcat   字符串的连接

 

 1>puts

 从制定位置开始,遇到\0结束

 不能格式化输出

 

 char str[]="helloword!"

 //使用%s不会换行

 printf("%s",str);

 //使用puts函数可以自动换行

 puts(str);

 puts("abc");

 

 

 

 2>gets

 

 

 char str2[200];

 //使用scanf接收键盘输入的字符串,中间不能有空格

 scanf("%s",str2);

 

 使用gets会给提示

 //1>warning : .....

 //2>使用gets输入字符串的时候,字符串中间可以有空格

 gets(str2);

 

 puts(str2);

 

 

 

 3>strcat

 

 返回的是第一个地址,保存到str得数组中

 strcat(str,str2);

 

 puts(str);

 

 

 

 ********************* 字符串处理函数  *********************

 

 

 ***** strcpy         字符串拷贝函数

 

 strcpy(字符数组名1,字符数组名2)

 将字符数组名2得内容拷贝到字符数组名1,字符数组名1中的

 内容被覆盖

 

 //strcpy(str,str2)

 //str2的内容拷贝到str

 1>str中原来的内容被覆盖

 2>str的长度>=str2的长度,如果小于则越界了

 char str[100]="abc";

 

 char str2[]="hello";

 

 strcpy(str,str2);

 

 

 

 ***** strcmp         字符串比较函数

 

 

 比较的原则上:

 1>比较他们的ascii码值

 2>比较字典中出现的顺序(越靠后越大)

 

 strcmp(字符数组名1,字符数组名2)

 

 字符数组名1 = 字符数组名2 返回 0

 

 字符数组名1 > 字符数组名2 返回 > 0

 

 字符数组名1 > 字符数组名2 返回 < 0

 

 strcmy(str,str2);  //返回比较结果

 

 >0     str > str2

 ==0    str == str2

 <0     str < str2

 

 char s1[]="ab"

 cahr s2[]="db"

 

 printf("%d\n",strcmp(s1,s2));

 

 

 

 ***** strlen     计算字符串的长度

 

 

 计算字符串的长度

 ****************   返回的是可见的字符的个数

 

 int len = strlen(s1);

 

 char s3[]="我看传智" //得到的是12个字节

 printf("%lu\n",len);

 

 

 */


#include <stdio.h>


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

    // insert code here...

    printf("Hello, World!\n");

    return 0;

}





//  字符串练习

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

#include <string.h>


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

    

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

    //char str1[4]={'a','b','c'};

  //  char str2[10];

    

    

   int len = strlen(str);

    

    printf("%lu\n",len);

    

    //字符串函数的比较

 //   strcmp(str,str1);

    

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

    //字符串拷贝函数,str的字符串覆盖住str1得字符串

  //  strcpy(str1,str);

    

    

    

    //链接将str里的字符串放到了str1的字符串后边

 //   strcat(str1,str);

    //输入 可以有空格

   // gets(str1);

    //打印 会自动回车

   // puts(str1);

    return 0;

}




//  计算字符串的长度

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


/*

计算字符串的长度:

'\0'作为结束条件,做循环

如果我们取得的字符不是'\0',让计数变量+1

*/

/*

#include <stdio.h>

//可见字符串的个数

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

    int i = 0;

   //定义一个字符串

    char str[]="abc";

    //定义一个变量保存字符的个数

    int count = 0;

    

    //判断是否到了字符串的末尾

    

    while(str[i] != 0 ){

        count++;

        ++i;

    }

    char str4[]="hello";

    printf("%lu\n",sizeof(str4));

    printf("%lu\n",sizeof(str4)/sizeof(char));

    return 0;

}

*/


#include <stdio.h>

//字符串的长度

int main(){

    

    char str[5]="abc";

    

    int count = 1;

    while(str[count -1] != '\0'){

        count++;

    }

    printf("%d\n",count);

    return 0;

}



对字符数组进行遍历

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

/*

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

    //定义一个字符串

    char str[5]="abcd";

    //利用循环遍历

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

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

    }

    

        return 0;

}

*/


int main(){

    

    char str[10]={"abcd"};

    

    int len = strlen(str);

    

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

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

    }

    return 0;

}




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

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>


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

    

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

        //判断str[i]==key

        if(str[i] == key){

          //字符出现的位置(下标)

            return i;

        }

    }

    return -1;

}



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

    //定义一个函数 (参数:字符串  要查找的字符)

    

    //循环,结束条件是 str[i]='\0'

    

    //判断条件是 str[i]= key  返回i

    

    //for 循环执行结束后返回1

    

    char str[]="abcdefghhjk";

    

    int loc = keyIndexOfString(str,'a');

    

    if(loc != -1){

        printf("loc = %d\n",loc);

    }else{

        printf("没有找到!\n");

    }

    return 0;

}




//  单词首字母大写&统计单词个数

//

//  Created by 李佳乐 on 15-3-16.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>

#include <string.h>

/*

 使用gets()函数从键盘输入一个字符串,判断输入的有多少个单词?

 */

/*

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

    char str[100];

    int count = 0;

    int isWord =1;//表示这是一个单词的开始

    

    //提示输入字符串

    printf("请出入一个字符串\n");

    //接收字符串

    gets(str);  // keai de qin

    

    //遍历字符串,如果遇到\0就退出

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

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

            isWord = 1; // 表示一个单词的开始

        }else if(isWord == 1){

            str[i] = str[i] - 32;

            count++;

            isWord = 0;

        }

    }

    printf("count = %d\n",count);

    

    printf("%s\n",str);

    

    return 0;

}

*/


int main(){

    //定义字符串数组

    char str[100];

    //定义变量记录单词的个数

    int count = 0;

    //定义变量isWord代表单词的开始

    int isWord = 1;

    //提示用户输入一个字符串

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

    gets(str);// hello word!!

    

    //遍历字符串,如果遇到'\0'就退出

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

        //判断是否是一个单词

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

            isWord = 1;//表示这是一个单词的开始

            

        }else if(isWord == 1){

            str[i] = str[i] - 32;

            count++;

            isWord = 0;

        }

    }

    

    printf(" count = %d\n",count);

    printf("%s\n",str);

    return 0;

}




//  二维字符数组

//

//  Created by 李佳乐 on 15-3-19.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*二维字符数组

 用二维数组来保存多少个字符串

 第一维的是每个字符串的首地址

 每个字符串的长度,不能超过第二维长度

 

 char ch[3][5]={"abc","wer","tyu"};

 */

#include <stdio.h>


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

    // 定义一个二维字符数组

    char ch[3][5]={"abc","wer","tyu"};

    ch[1][2]='z';

    

    //遍历

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

        printf("%s\n",ch[i]);//ch+i 可以打印出来  有警告

    }

    return 0;

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值