码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-12 00:22:47      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   for   

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

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

bubuko.com,布布扣
#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

bubuko.com,布布扣
 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值。阅读英文水平要加强啊

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

bubuko.com,布布扣
#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);



}
View Code

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

bubuko.com,布布扣
 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 代替。

bubuko.com,布布扣
#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 代替

bubuko.com,布布扣
#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 函数

bubuko.com,布布扣
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

 

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

 

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

标签:style   blog   http   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/linrong/p/4019850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!