您的位置:首页 > 编程语言 > C语言/C++

C语言及程序设计提高例程-31 编制自己的字符串函数

2015-02-10 21:41 330 查看
贺老师教学链接 C语言及程序设计提高 本课讲解

字符串复制

#include <stdio.h>
char *scopy(char *str1, const char *str2);
int main()
{
    char s1[50];
    scopy(s1, "I am happy.");
    printf("%s\n", s1);
    return 0;
}
char *scopy(char *str1, const char *str2)
{
    int i=0,j=0;
    while(str2[j]!='\0')
    {
        str1[i]=str2[j];
        i++;
        j++;
    }
    str1[i]='\0';
    return str1;
}


另解:字符串复制
#include <stdio.h>
char *scopy(char *str1, const char *str2);
int main()
{
    char s1[50];
    scopy(s1, "I am happy.");
    printf("%s\n", s1);
    return 0;
}

 char *scopy(char *str1, const char *str2)
{
    char *p1=str1;
    const char *p2=str2;
    while(*p2!='\0')
    {
        *p1=*p2;
        p1++;
        p2++;
    }
    *p1='\0';
    return p1;
}


比较字符串(忽略大小写)
#include <stdio.h>
#include <ctype.h>
int scomp(const char *str1, const char *str2);
int main()
{
    printf("%d\n", scomp("PFXa", "pfXA"));
    printf("%d\n", scomp("PF12", "pF34"));
    printf("%d\n", scomp("Bxb3", "bdeF"));
    return 0;
}

int scomp(const char *str1, const char *str2)
{
    const char *p=str1,*q=str2;
    while(tolower(*p)==tolower(*q)&&*p!='\0'&&*q!='\0')
    {
        p++;
        q++;
    }
    if (tolower(*p)>tolower(*q))
        return 1;
    else if(tolower(*p)<tolower(*q))
        return -1;
    else
        return 0;
}


另解:比较字符串(忽略大小写)
#include <stdio.h>
int scomp(const char *str1, const char *str2);
int main()
{
    printf("%d\n", scomp("PFXa", "pfXA"));
    printf("%d\n", scomp("PF12", "pF34"));
    printf("%d\n", scomp("Bxb3", "bdeF"));
    return 0;
}

int scomp(const char *str1, const char *str2)
{
    int i=0, j=0;
    char c1, c2;
    do
    {
        c1=(str1[i]>='A'&&str1[i]<='Z')?str1[i]+32:str1[i];
        c2=(str2[i]>='A'&&str2[i]<='Z')?str2[i]+32:str2[i];
        i++;
        j++;
    }while(c1==c2&&c1!='\0'&&c2!='\0');
    if (c1>c2)
        return 1;
    else if(c1<c2)
        return -1;
    else
        return 0;
}


统计单词个数
#include <stdio.h>
int wordnum(const char *str);
int main()
{
    char s[81];
    gets(s);
    printf("\"%s\" have %d words.\n", s, wordnum(s));
    return 0;
}
/*
关键:word代表一种状态
word==0时,之前读到了空格
- 现读到空格,word保持0
- 现读到了非空格,单词数增1,word置为1
word==1时,之前读到的是非空格
- 现读到空格,word重置为0
- 现读到了非空格,继续读
*/
int wordnum(const char *str)
{
    int i,num=0,word=0;  //word为0,代表现在并不
    for(i=0; (*(str+i)!='\0'); i++)
    {
        if (*(str+i)==' ')
            word=0;
        else if (word==0)
        {
            word=1;
            num++;
        }
    }
    return num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: