ANSI C (2) —— str系列函数

参数可变的函数

#include <stdio.h>
#include <stdarg.h>
int mymax(int count, ...){
    int maxm=-1;
    va_list address;
    int i,number;
    va_start(address,count);  /* 设置 address为第一个参数的地址 */
    for(i=0;i<count;i++){
        number=va_arg(address,int);  /* 得到该地址的数字,且下移指针 */
        maxm=maxm>number?maxm:number;
    }
    return maxm;
}
int main(){
    int a[5];
    int sum;
    puts("enter some numbers, the numbers is not more than 5");
    while(~scanf("%d",&sum) && sum){
        for(int i=0;i<sum;i++) scanf("%d",&a[i]);
        switch (sum){
            case 1:
            printf("%d\n",mymax(sum,a[0]));
            break;
            case 2:
            printf("%d\n",mymax(sum,a[0],a[1]));
            break;
            case 3:
            printf("%d\n",mymax(sum,a[0],a[1],a[2]));
            break;
            case 4:
            printf("%d\n",mymax(sum,a[0],a[1],a[2],a[3]));
            break;
            case 5:
            printf("%d\n",mymax(sum,a[0],a[1],a[2],a[3],a[4]));
            break;
        }
    }
    return 0;
}

strncat

strncat(string1,string2,n):
将字符串1和2连接在一起,不过可以指定字符串2中追加到1的长度。如果n大于等于string2的长度,那么效果和strcat等价,如果小于长度值,那么我们可以连接一部分。
比如:

#include <stdio.h>
#include <string.h>

int main(){
    char s1[5]="1234";
    char s2[10]="abcdefghi";
    strncat(s1,s2,19);
    printf("%s\n", s1);
    return 0;
}
/*
for strncat(s1,s2,19) :
1234abcdefghi
for strncat(s1,s2,4)  :
1234abcd
*/

strncpy

char *strncpy(char *dest, const char *src, size_t n);
strncpy()会将参数src字符串拷贝前n个字符至参数dest所指的地址。
如果src的字符个数小于n就用空格填充。

下面是它和strcpy()的对比:

int main(){
    char s1[]="I love Beijing.";
    char s2[]="I'm Chinese.";
    strncpy(s1,s2,8);
    printf("%s\n", s1);
    strcpy(s1,s2);
    printf("%s\n", s1);
    return 0;
}
/*
I'm Chineijing.
I'm Chinese.
*/

strncmp

关于两个字符串的比较:
1)他们字符串长度不相等,但是相应的字符都是一样的。 长的字符串>短的字符串
2)存在相同位置字符不等的情况。字符大的优先级高
和strcmp()对应的函数strncmp(),它可以指定字符串比较的长度。
例如:

    char s1[8]="abcdef";
    <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值