zoukankan      html  css  js  c++  java
  • C 字符串操作函数

    针对C风格的字符串(char p[n];):

    长度(strlen)、追加(strcat, strncat)、比较(strcmp, strncmp)、查找(strchr, strstr)等。

      --带n的版本,是有限操作,而非全部操作。例如strcmp 是对比两个字符串,而strncmp 则是对比两个字符串的前n个字符。

      --追加应该使用strncat,因为strcat 有溢出的危险。(奇怪的是,strcat 在我的minGW32 - gcc 4.9.3这里没有提示错误。)

    输入(scanfgetsfgetssscanf)、输出(printfputsfputssprintf)。

      --scanf 也存在溢出的可能,且会将空白(空格、回车等)当成输入终止。

      --gets 只会将回车当成输入终止。但它也存在溢出可能。

      --fgets 是安全的。

      --sscanf 是将字符串中的内容读取到指定的变量中!和 sprintf 相反。

      --sprintf 则是将一串内容输出到指定的字符串!!

    还有一个 atoi 函数,可以将字符串转成int 。(atof--转成浮点数,其他略)

      --a 应该是 char array的意思。

    注意:上面说的溢出,都是目标字符数组的长度 无法容纳最终的结果导致的。

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main(int argc, char const *argv[])
    {
        char s1[15]="hello world";
        char s2[15]="abc defxxx";
    
        strcat(s1, s2); //追加
        // strncat(s1, s2, strlen(s2));
        printf("%s
    ", s1);
    
        int v = strcmp(s1, s2); //比较
        printf("%d
    ", v);
    
        char s3[]="hello";
        char s4[]="hello";
        if( s3 != s4){ //应该比较的是地址
            printf("%s != %s
    ", s3, s4);
        }
    
        char s5[]="helloaaa";
        char s6[]="hellobbb";
        v = strncmp(s5, s6, 5); //比较前5个字符
        printf("%d
    ", v);
    
        strcpy(s5, s6);
        printf("%s, %s
    ", s5, s6);
    
        strncpy(s1, s2, 3);//拷贝前几位
        printf("%s, %s
    ", s1, s2);
    
        int i = 200;
        char ss[100]={0};
        sprintf(ss, "i = %d", i);//把要输出的内容输出到string中?
        printf("%s
    ", ss);
    
        // ss=itoa(i); //不是标准的c语言库函数。vs有
        //atoi是标准的c语言库函数
        
        char s7[100]="abc=500";
        char s8[100]="5+6=";
        sscanf(s7, "abc=%d", &i); //利用字符串作为输入,输出指定内容到指定变量。
        printf("%d
    ", i);
        int a,b;
        sscanf(s8, "%d+%d=", &a, &b);
        printf("%d, %d
    ", a, b);
    
    
        const char *p = strchr(s7, '='); //查找字符
        printf("%s
    ", p);
        p = strstr(s7, "b"); //查找字符串
        printf("%s
    ", p);
    
        strcpy(s7, "abc_123_ee_xx");
        p=strtok(s7, "_"); //将_替换成0
        // printf("%s, %p, %p
    ", p, p, s7);
        // p=strtok(NULL, "_"); //怎么知道是对哪个操作的????
        // printf("%s, %p, %p
    ", p, p, s7);
        // p=strtok(NULL, "_"); //怎么知道是对哪个操作的????
        // printf("%s, %p, %p
    ", p, p, s7);
        while(p){
            printf("%s, %p, %p
    ", p, p, s7);
            p=strtok(NULL, "_");
        }
    
        return 0;
    }
  • 相关阅读:
    Web网页数据抽取软件的设计与实现
    以Groovy的方式更稳定地解析HTML(转载)
    HTML 资讯汲取(上篇) 使用 JDOM 、 TagSoup 及 XPath
    html解析
    HTML 資訊汲取(下篇) TagSoup 輸出 namespace 問題的解決方案
    国外免费主机空间
    ASP.NET获取客户端IP地址、系统版本、浏览器版本
    阁下莫非就是当年华山论剑武功独步天下罕有其匹号称一朵梨花压海棠的少林寺智障大师收养的小沙弥低能的爱犬旺财踩扁的蟑螂小强曾滚过的一个粪球?
    html中table里的col标签
    Visual Studio 2010 中的 TODO
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5658349.html
Copyright © 2011-2022 走看看