C语言1月28日

本文介绍了C语言中字符输入、字符串输入函数(scanf,getchar,scanf,gets)的区别,以及sizeof和strlen的不同用途。还讨论了常量区和栈区的特性,以及如何进行字符串操作,如判断回文、转换小写、单词内反转和单词间逆序。
摘要由CSDN通过智能技术生成

字符数组与字符串常量

  • 实现字符输入:scanf(“%c”,&c);getchar(c)
  • 实现字符串输入:scanf(“%s”,c);gets(c)
  • sizeof()与strlen( )的区别:结构上sizeof是运算符,strlen是函数,功能上,sizeof求的是所占字节数,strlen算的是字符串长度(不包括‘\0’),需要引用头文件。
  • 常量区:

  • 不可以修改:
    整型常量 :10
    浮点常量:1,24
    字符常量:‘a’
    字符串常量
    地址常量&a,数组名,函数名,
     char buf[10] = "abcdef";
     char* p = "abcdef";
     //buf++ 不合法,++对buf进行,buf数组名地址常量,常量区的不可以进行修改  
    //p++ 合法,++对p进行的, p变量是在函数内定义的变量存放在栈区,可以进行修改。
    //*buf++不合法,*与++都是第二级运算符,从右到左运算,先进行++运算,++对buf进行,buf数组名常量区,不能修改常量区
    //*p++合法,先进行++运算++对p进行,p在函数内定义局部变量栈区。
     //(*buf)++合法  ( )优先级高,先进行括号内运算,,*buf==*&buf[0]==buf[0];数组在函数内定义局部变量栈区,数组中每一个元素都在栈区可以修改 //(*p)++不合法,*p=a,在常量区
     //(*p)++ *p==*(字符串首个字符的地址)常量区中’a'的地址,“ ”字符串常量,那么它里边的每个字符也都是在常量区的

    字符串习题

  1. 判断字符串是否回文("abcba")
    判断首尾字符是否一样,当i<j时循环结束

  2. #include <stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100];
        gets(str);
        int j = strlen(str) - 1;
        int i = 0;
        while (i < j) {
            if (str[i] != str[j]) {
                printf("0");
                return 0;
            }
            i++;
            j--;
        }
        printf("1");
        return 0;
    } 

    将字符串转换成小写字母

    #include <stdio.h>
    #include<string.h>
    
    int main()
    {
        char str[100];
        gets(str);
        for (int i = 0;str[i]!='\0'; i++) {
            if (str[i] >= 'A' && str[i] <= 'Z') {
                printf("%c", str[i] + ('a' - 'A'));
            }
            else {
                printf("%c", str[i]);
            }
            
        }
        return 0;
    } 

    将字符串进行单词内部的反转
    创建一个函数,实现单词内的反转。

  3. #include <stdio.h>
    #include<string.h>
    void exchange(char* str, int start, int end) {
        while (start < end) {
            int temp = str[start];
            str[start] = str[end];
            str[end] = temp;
            start++;
            end--;
        }
        
    }
    int main()
    {
        char str[100];
        gets(str);
        int end = strlen(str);
        int start = 0;
        for (int i = 0; i <= end; i++) {
            if (str[i] == ' ' || str[i] =='\0') {
                exchange(str, start, i - 1);
                start = i + 1;
            }
        }
        printf("%s", str);
        return 0;
    } 

    在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。(先整体反转,再将单词反转过来)
     

  • 48
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值