第四天:C基础之字符与字符串

今天老师主要是通过练习程序来讲解字符和字符串,所以这次日志也是通过分析代码来总结所学知识。

首先是复制字符 ,要注意‘\0‘的存在。使用循环时,一般用‘\0’进行退出判断条件。

#include<stdio.h>
int copy(char *n,char *m);

int main()
{
    char arr[] = {"hello"};
    char brr[10];

    printf("%d\n",sizeof(arr));
/*    int i;
    for(i=0;i<6;i++)
    {
        brr[i] = arr[i];
    }
    printf("%s\n",brr); */
    copy(arr,brr);
    printf("%s\n",brr);
}

int copy(char *n, char *m)
{
    printf("%d\n",sizeof(n)); //n为指针 占四个字节
    int i = 0;

    while(1)
    {    

        m[i] = n[i];
        if(n[i] == ‘\0‘)
            break;
        i++;
    }

}

复制字符串

在这个程序中,我犯了一个错误。就是在子函数中,我直接用sizeof()函数,想得到字符串的长度 ,这明显是不正确的,在子函数中进行sizeof(n) ,所得到的结果为4,为char指针类型所占的字节数,而不是字符串的长度。要知道字符串长度可以使用 strlen()函数实现。

第二个程序是自己编写 strlen  strcmp strstr strcat

 1 #include<stdio.h>
 2 int strlen(char *a);
 3 int strcmp(char *a,char *b);
 4 int strcat(char *a , char *b);
 5 int strstr(char *a ,char *c);
 6 int  main()
 7 {
 8     char arr[] = {"hello world"} ;
 9     char brr[] = {"good moring"} ;
10     char crr[] = {"world"};
11
12     printf("arr 的长度为:%d\n",strlen(arr));
13     printf("brr 的长度为:%d\n",strlen(brr));
14
15     int k = strcmp(arr,brr);
16     if( k == 0 )
17         printf("arr  等于 brr \n");
18     else  if( k < 0)
19         printf("arr  小于 brr\n");
20     else  printf("arr  大于 brr\n");
21
22     strcat(arr,brr);
23     printf("arr+brr is %s\n",arr);
24
25      if( strstr(arr,crr) == NULL )
26          printf("字符不存在\n");
27     else
28         printf("所查找的字符位置在%d\n",strstr(arr,crr));
29 }
30
31 int strlen(char *a)
32 {
33     int i = 0;
34     while(1)
35     {
36         if(*(a+i) == ‘\0‘)
37             break;
38         i++;
39     }
40     return i+1;
41
42 }
43 int strcmp(char *a , char *b )
44 {
45
46     int i=0 ;
47     while(1)
48     {
49          if( *(a+i) < *(b+i))
50              return -1;
51          if(*(a+i) > *(b+i))
52             return 1;
53         if(*(a+i) == ‘\0‘)
54             if(*(b+i)==‘\0‘)
55                 return 0;
56         i++;
57     }
58
59 }
60 int strcat(char * a , char * b)
61 {
62     int i,j;
63     for(i = strlen(a) -1,j = 0; ;i++,j++ )
64     {
65         *(a+i) = *(b+j);
66         if( *(b+j) == ‘\0‘)
67             break;
68     }
69
70 }

string

其中 strstr函数功能未能 写出 ,第二个函数在使用man 参看意思时理解错误。理解为对比两个字符串的长度大小 。实际上是逐个比较ascii值。阅读英文水平要加强啊

第三个程序是计算字符串中单词的个数,没有多大问题

#include<stdio.h>

int main()
{
    char data[1024] = {"he  ha heh kke eh  jha  ha h awed"};
    int number = 0;
    int i;

    for(i=0;;i++)
    {
        if(*(data+i)==‘ ‘)
            if(*(data+i-1)!=‘ ‘)
                  number ++;
        if(*(data+i)==‘\0‘)
            break;

    }
    if(number== 0)
    {
        printf("no word%d\n",number);
        return 1;
    }    

    printf("word number is %d\n",number+1);

}

第四个函数是判断一个数是否为回文。也顺利写出。

 1 #include<stdio.h>
 2
 3 int main()
 4 {
 5         char data[1024] = {"abcdecba"};
 6         int i;
 7         int n = strlen(data);
 8         for(i=0;i<n;i++)
 9         {
10                 if(*(data+i)!=*(data+n-1-i))
11                 {
12                         printf("%s不是回文\n",data);
13                         return;
14                 }
15
16         }
17         printf("%s是回文\n",data);
18
19
20
21 }

判断回文

第五个是判断一个数是否为三重回文,其中,需要将函数itoa将整型转换为字符串 。但是itoa不是标准库里面的函数,所以不能使用。就使用sprintf 代替。

#include<stdio.h>
#include<string.h>
int  PanDuan(char *data);

int main()
{

    int i ;
    char a[1024] = {0};
    char b[1024] = {0};
    char c[1024] = {0};
    for(i=0;i<1000;i++)
    {
        sprintf(a,"%d",i);
        sprintf(b,"%d",i*i);
        sprintf(c,"%d",i*i*i);
        if(PanDuan(a))
            if(PanDuan(b))
                if(PanDuan(c))
                    printf(" %d\n",i);
    }

    printf("\n");
}
int  PanDuan(char *data)
{

    int i;
    int n = strlen(data);
    for(i=0;i<n;i++)
    {    

        if(*(data+i)!=*(data+n-1-i))
        {

            return 0;
        }

    }
    return 1;

}

三重回文 

第六个函数是统计字符串 ,要注意的是 写判断时,不能 使用 1< b < 5   因为 前一个如果正确,返回为1 ,然后就是对比1和5的大小。所以要用 1<b && b < 5 代替

#include<stdio.h>

int main()
{
    char data[1024] = {"There USA 8 Func And USB2.0 *10 00 ad"};

    int i ;
    int big = 0;
    int small =0;
    int number = 0;
    int spe = 0;
    for(i=0;;i++)
    {
        if(122 >= *(data+i) && *(data+i) >= 97)
            small++;
        else if(90 >= *(data+i) && *(data+i)>= 65)
            big++;
        else if(57 >= *(data+i) && *(data+i )>= 48)
            number++;
        else spe++;
        if(*(data+i)==‘\0‘)
            break;
    }
    printf("big is %d\n",big);
    printf("small is %d\n",small);
    printf("number is %d\n",number);
    printf("spe is %d\n",spe);

}

统计字符串组成

最后 一个代码是自己实现atoi 和itoa 函数

int atoi(int *number ,char *arr);

int main()
{
    char arr[10]  = {"98457"};
    int number = 0;
    int *p = &number;
    atoi(p,arr);
    printf("number is %d\n",number);

 }
int atoi(int *number ,char *arr)
{
    int i;
    for(i = 0; ; i++)
    {
        if(*(arr+i)==‘\0‘)
                break;
        *number =*number *10 + (*(arr+i) -48);
    }
}

atoi

嵌入式驱动编写主要是对整型和字符串进行操作,所以今天的课程尤为重要。

时间: 2024-10-10 04:27:19

第四天:C基础之字符与字符串的相关文章

Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service method) 4.4 String类型 String类型不是基本类型,而是引用类型(reference type).

廖雪峰Java-1程序基础-8字符和字符串

1.字符类型char char是基本的数据类型 char:保存一个字符,如英文字符.中文字符. Java使用unicode表示字符,可以将char赋值给int类型,查看字符对应的unicode编码. 使用16进制的unicode编码定义字符 char c1 = 'A'; char c2 = '中'; int n1 = c1;//65 int n2 = c2;//20013 System.out.println(n1+"\t"+n2); System.out.println(Intege

C#控制台基础 用字符分割字符串,删除空白项

1.不删空白项 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication2 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 string number

2017-2018-2 20155228 《网络对抗技术》 实验四:MSF基础应用

2017-2018-2 20155228 <网络对抗技术> 实验四:MSF基础应用 1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1 一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器的攻击,如ms11_050:(1分) 1.3 一个针对客户端的攻击,如Adobe:(1分) 1.4 成功应用任何一个辅助模块.(0.5分) 以上四个小实践可不限于以上示例,并要求至少有一个是和其他所有同学不一样的,否则扣

20145239 杜文超 实验四 Android开发基础

20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Android Studio安装 实验步骤 安装 JDK 并配置 JDK 环境变量 依次使用计算机->系统属性->高级系统设置->高级->环境变量,然后新建一个JAVA_HOME变量,令它为计算机中安装JDK的位置: 安装Andriod Studio并配置 1.双击运行Andri

20145301实验四 Android开发基础

20145301<Java程序设计>实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.26 15:30-18:30 实验名称:实验四 Andoid开发基础

20145331实验四 &quot;Android开发基础&quot;

20145331实验四 "Android开发基础" 程序设计过程 实验内容 ·安装Android Studio ·运行安卓AVD模拟器 ·使用安卓运行出虚拟手机并显示HelloWorld以及自己的学号 实验步骤 1.安装android studio: 2.安装完成后的截图如下所示: 3.新建一个工程: 4.进入工程并对输出进行修改,修改后的截图如下: 5.代码如下所示: 实验总结与心得体会: 我认为这次实验是对平台的熟悉的过程,实验过程基本平稳,没遇到什么太大的麻烦,不过这个软件运行的

20155208 实验四 Android开发基础

20155208 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握Android中事件处理机制. 实验要求 选做,有加分 实验步骤 (一)Android Stuidio的安装测试 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章 安装 Android Stuidio 完成Hello World

8. PowerShell - 基础概要,变量,字符和字符串操作,运算符操作

PowerShell脚本的基础概要 常量,变量的使用 各种字符串的操作 对运算符的操作 数组,哈希表:创建.修改合并数组和哈希表 条件判断:if, switch 语句 逻辑判断:使用运算符进行判断 循环控制:while, do-while, do- until , for,foreach 语句 模块化:组织和调整代码:使用切当的数据类型,调用其它脚本函数 WMI对象: WMI命名空间的概念,WMI所提供的功能,查看和使用WMI命名空间. WMI的类:get-wmiobject;  查询WMI A