精华内容
下载资源
问答
  • C语言实现 分隔符报文的解析,例如|1|2|3| 1|2|3 |1|2|3 1|2|3| 这几种模式都可以成功解析出各个域
  • https://www.cnblogs.com/quliuliu2013/p/6879817.html
    展开全文
  • 本资源综合利用c语言的while循环, if条件判断, 函数递归调用等多种c语言知识,该算法采用传统的数位分离和字符数组,然后再用千分位分隔符进行插入。综合考虑,该算法对c语言初学者具有较大启发。
  • C语言实现按分隔符来截取字符串

    万次阅读 多人点赞 2017-12-01 15:40:38
    我们需要将这个字符串按逗号作为分隔符来截取。 解决方法:使用C语言中的strtok()函数实现 代码实现(下面代码的功能是将字符串"now , is the time for all , good men to come to the , aid of their countr

    问题描述:我们的系统通过Socket网络通讯往linux服务器上发送数据,服务器上接收的数据格式是以逗号隔开的字符串。我们需要将这个字符串按逗号作为分隔符来截取。

    解决方法:使用C语言中的strtok()函数实现

    代码实现(下面代码的功能是将字符串"now , is the time for all , good men to come to the , aid of their country"以逗号作为分隔符来截取,并将截取出的字符串打印出来):

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char str[] = "now , is the time for all , good men to come to the , aid of their country";
        char delims[] = ",";
        char *result = NULL;
        result = strtok( str, delims );
        while( result != NULL ) {
        printf( "result is \"%s\"\n", result );
        result = strtok( NULL, delims );
        }
    }
    运行结果如下:



    进一步:封装成实现按分隔符截取字符串的函数

    #include <stdio.h>  
    #include <string.h>  
    void split(char str[],char delims[])
    {
        char *result = NULL; 
        result = strtok( str, delims );  
        while( result != NULL ) {  
        printf( "result is \"%s\"\n", result );  
        result = strtok( NULL, delims );  
        }  
    }
    int main()  
    {  
        char str[] = "now , is the time for all , good men to come to the , aid of their country";  
        char delims[] = ",";  
    	split(str,delims);
    }  


    展开全文
  • 该读文件方式,默认是以逗号“,”作为分割符,若是以其它分隔符,比如制表符“/t”,则需要显示的指定分隔符。如下 pd_read_csv(filename,'/t') 但如果遇见某个字段包含了”/t”的字符,比如网址“www.xxx.xx/t…...
  • C语言根据分隔符提取字符

    千次阅读 2016-09-14 22:41:14
    对于形如“12.345.6789.abcdef.”这种由分割分割的字符串,如果要将分割内的内容提取出为如下格式: str[0] = "12" str[1] = "345" str[2] = "6789" str[3] = "abcdef" 有好多种方法,这里记一种最简方法,如下...

    对于形如“12.345.6789.abcdef.”这种由分隔符分割的字符串(多用于日志或通信报文),如果要将分隔符内的内容提取出为如下格式:

    str[0] = "12";
    str[1] = "345";
    str[2] = "6789";
    str[3] = "abcdef";

    有好多种方法可以实现这一目标,这里记一种最简方法,如下:

    int ReadKeyForString(char *pString, char *pKey, char code, char order)
    {
        char *pos, *posLast;
        int i;
    
        pos = pString;
        order++;    //默认0为第1串字符
        for(i = 0; i < order; i++){
            posLast = strchr(pos, code);
    
            if (posLast == NULL){                   //未找到字符ID
                return -1;
            }
    
            if ((i + 1) == order){                  //找到成功返回
                memcpy(pKey, pos, posLast - pos);
                return 0;
            }
            pos = posLast + 1;
        }
        return -2;                                  //查找越界
    }

    使用方法:

    char *str = "12.345.6789.abcdef";
    char  key[4][32] = {0};
    char  order = 0;
    while(!ReadKeyForString(str, key[order], '.', order)){
         order++;
    }

    如有更好的方法,欢迎留言~~~

    展开全文
  • c语言实现字符串分割split(), 实现C语言实现按分隔符来截取字符串
  • C语言中scanf与分隔符(空格回车Tab)

    万次阅读 多人点赞 2013-11-18 20:09:08
    众所周知,C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值,并存储到参数列表中指针所指向的内存单元。下面从几个方面说一下一些稍微细节的东西。下面的实验都在vc6.0中通过。 1、scanf的...

    众所周知,C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值,并存储到参数列表中指针所指向的内存单元。下面从几个方面说一下一些稍微细节的东西。下面的实验都在vc6.0中通过。

    1、scanf的返回值

    scanf通常返回的是成功赋值(从标准输入设备赋值到参数列表所指定的内存区域)的数据项数,如果出错或是遇到end of file(注意,如果想从键盘输入EOF,在windows的DOS窗口用Ctrl+Z 或F6;在UNIX系统上,用CTRL+D。),则返回EOF,比如:

    scanf("%d%d", &x, &y);

    如果x和y都被成功读入,那么scanf的返回值就是2;
    如果只有x被成功读入,返回值为1;
    如果x和y都未被成功读入,返回值为0;
    如果遇到错误或遇到end of file,返回值为EOF。

    2、scanf的处理机制

    scanf以删除的方式从缓冲区读入数据(来自标准输入设备的数据存储在缓冲区),也就是说,scanf从缓冲区读入一个数据项,该数据项在缓冲区中就被清除掉了。而如果scanf需要读取一个数据项,返现缓冲区当前是空的,那么程序就会在scanf代码处阻塞,等待用户输入,scanf函数接收到相应的数据项之后,在缓冲区中将这一数据项清除,scanf函数返回,程序继续执行。

    3、scanf对不同类型输入的处理方式

    首先,要清除一个概念:空白字符(white space)。一般,程序中所指的空白字符是指空格(space),回车(enter)和指标符(table)。

    3.1 整数%d

    对于整型数据的输入,也就是说"%d"类型的输入,scanf默认的分割符是所有的空白字符(空格,回车和指标符都行)。也就是说如果一个scanf函数中出现scanf("%d%d",&a,&b),那么用任何一个空白字符来分隔两个整数a,b的值,变量a,b都可以接收到正确的输入。另外,要注意的是,scanf对于数字输入,会忽略输入数据项前面的空白字符。下面是例1:

    [cpp]  view plain copy
    1. Code:  
    2. #include<stdio.h>  
    3. int main()  
    4. {  
    5.     int a,b;  
    6.     printf("Input the value of a and b:");  
    7.     while(scanf("%d%d",&a,&b)!=EOF)  
    8.     {  
    9.         printf("a=%d,b=%d\n",a,b);  
    10.         printf("Input the value of a and b:");  
    11.     }  
    12.     return 0;  
    13. }  
    14. Output:  
    15. Input the value of a and b:123 456  
    16. a=123,b=456  
    17. Input the value of a and b:123  456  
    18. a=123,b=456  
    19. Input the value of a and b:123  
    20. 456  
    21. a=123,b=456  
    22. Input the value of a and b:  
    23. 123 456  
    24. a=123,b=456  
    25. Input the value of a and b:     123 456  
    26. a=123,b=456  
    27. Input the value of a and b: 123 456  
    28. a=123,b=456  
    29. Input the value of a and b:^Z  
    30. Press any key to continue  
    3.2 字符串%s

    scanf对于字符串输入的处理和对整数类似,会忽略前导的空白字符,而且默认的分隔符是所有的空白字符。但是,要注意的是,由于C语言中,没有string类型,都是用char型数组来表示。因此,scanf会为每一个输入的字符串最后加一个‘\0’。下面是一个例子,可以看出scanf这货的边界控制还是要小心。如下例2。

    [cpp]  view plain copy
    1. #include<stdio.h>  
    2. int main()  
    3. {  
    4.     char a[5],b[5];  
    5.     int i;  
    6.     printf("Input the value of a and b:");  
    7.     while(scanf("%s%s",a,b)!=EOF)  
    8.     {  
    9.         printf("a=%s,b=%s\n",a,b);  
    10.         for(i=0;i<5;i++)  
    11.             printf("%d:(%c) ",a[i],a[i]);  
    12.         printf("\n");  
    13.         for(i=0;i<5;i++)  
    14.             printf("%d:(%c) ",b[i],b[i]);  
    15.         printf("\n");  
    16.         printf("Input the value of a and b:");  
    17.     }  
    18.     return 0;  
    19. }  
    运行结果:


    3.3 字符%c

    scanf在处理对字符数据的输入时,既不会忽略前导空白字符,默认也没有任何分隔字符。所有的字符,包括空白字符都会被当成输入字符。下面是例3。

    [cpp]  view plain copy
    1. #include<stdio.h>  
    2. int main()  
    3. {  
    4.     char a ,b ;  
    5.     printf("Input the value of a and b:");  
    6.     while(scanf("%c%c",&a,&b)!=EOF)  
    7.     {  
    8.         printf("a=%c,b=%c\n",a,b);  
    9.         printf("Input the value of a and b:");  
    10.     }  
    11.     return 0;  
    12. }  
    运行结果:


    可以看出,在对字符数据输入的时候,由于缓冲区中有回车空格等数据,会导致输入数据比较诡异,为了解决这个问题,有以下方法:

    (1) 清空缓冲区

    在微软系统中,有一个名为fflush(stdin)的函数,可以用来清空缓冲区,如下例4。

    [cpp]  view plain copy
    1. #include<stdio.h>  
    2. int main()  
    3. {  
    4.     char a ,b ;  
    5.     printf("Input the value of a and b:");  
    6.     while(scanf("%c%c",&a,&b)!=EOF)  
    7.     {  
    8.         printf("a=%c,b=%c\n",a,b);  
    9.         fflush(stdin);  
    10.         printf("Input the value of a and b:");  
    11.     }  
    12.     return 0;  
    13. }  
    运行结果:


    (2)将缓冲区的数据读出来

    有的编译系统并没有定义stdin的fflush操作,这个时候,可以把缓冲区中的数据读出来,有如下几种可行的方法:

    1) getchar()

    将例4中的fflush(stdin);语句换成

    char c;
    while((c=getchar())!='\n'&&c!=EOF);

    运行效果和上面的相同。

    2)gets()

    char* gets(char* buffer)从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
    要注意的是gets函数可以无限读取,不会判断上限,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。

    将例4中的fflush(stdin);语句换成

    char c[10];
    gets(c);

    运行效果也和上面的相同。

    4、在stackoverflow上看到的一个问题

    [cpp]  view plain copy
    1. #include<stdio.h>  
    2. #include<stdlib.h>  
    3. #include<string.h>  
    4. char *method1(void)  
    5. {  
    6.     static char a[4];  
    7.     scanf ("%s\n", a);  
    8.     return a;  
    9. }  
    10.   
    11. int main(void)  
    12. {  
    13.     char *h = method1();  
    14.     printf ("%s\n", h);  
    15.     return 0;  
    16. }  
    运行结果:

    [cpp]  view plain copy
    1. ab  
    2. cd  
    3. ab  
    4. Press any key to continue  
    可以发现,输如两次之后才会输出。这个现象比较诡异,原因如下:

    White space (such as blanks, tabs, or newlines) in the format string match any amount of white space, including none, in the input.  Everything else matches only itself.
    Thus with scanf ("%s\n", a) it will scan for a string followed by optional white space. Since after the first newline more whitespace may follow, scanf is not done after the first newline and looks what's next. You will notice that you can enter any number of newlines (or tabs or spaces) and scanf will still wait for more.
    However, when you enter the second string, the sequence of whitespace is delimited and scanning stops.

    展开全文
  • 千位分隔符

    千次阅读 2021-05-03 11:13:10
    本关需要你完成在数字中插入千分位分隔符的小程序。 相关知识 什么是千分位分隔符呢?千位分隔符,其实就是数字中的逗号。依西方的习惯,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值。所以人们在...
  • C++使用千位分隔符的代码

    千次阅读 2019-04-10 15:58:28
    下边代码内容是关于C++使用千位分隔符的代码。 #include #include using namespace std; int main() { int j , i = 0, k = 0 ,ix; cout << “To Exit press Ctrl+zn”; cout << "Enter decimal ...
  • c语言读取txt文件中的逗号分隔符文件,网上找了一下都很麻烦,想了想还是自己写一个吧,还挺好用的。 1,2,4,5,6,7//适用于多行这样的数据 话不多说直接上代码 char buf[1024]; /*缓冲区*/ FILE *fp; /...
  • 主要是针对“%c”:默认没有任何分隔字符(包括all空白字符)[cy老师说的不对] 情况一 char a,b;...则字符输入没有任何分隔符 情况二 char a,b; scanf("%c %c",&a,&b); printf("%...
  • C语言中,逗号既是一个运算符(operator),又是一个分隔符(separator)Comma Operator in C
  • 方法一(被处理的必须为Number类型) let str = 123456789; y.toLocaleString() //123,456,789 方法二(被处理的为String类型的数字) let reg = /(\d)(?=(?...let target = str.r...
  • 在语言程序中,空格,回车/换行,逗号等,在各自不同的应用场合起着分隔的作用。 例如:int,a,b,c; printf("%d%d%d\n",a,b,c); C语言中,还有一些具有特定意义的符号。例如:花括号'{'和'}'通常用于标识函数整体...
  • 给数字添加千分位分隔符

    千次阅读 2020-03-29 11:46:25
    给数字添加千分位分隔符 本文转自:https://me.csdn.net/linhai_qq 法一:int i=0,j=0; void tranvers(char a[],long long n) { i++; if(i%4!=0) a[j]=n%10+‘0’; else {a[j]=’,’;a[++j]=n%10+‘0’;i++;} if(n/...
  • 参数:format格式控制,argument可选参数 返回值:返回成功复制的数据项数,出错时返回EOF(-1) 1)循环输入时可以为 while(scanf("%d", &key) != EOF) while(scanf("%d", &key) !...
  • strtok函数使用参考: ... 解决连续两个分割符当作一个的参考代码: int n; int tmp_len = len; for(n=0; n<tmp_len; n++) //解决:strtok两个连续分隔符当作一个提取的问题 { if(tmp_bu...
  • C/C++输入以空白符作为分隔符

    千次阅读 2020-09-30 08:41:02
    用键盘输入默认以空白符为分割符的输入(你也可以理解为空白符输入不进去): C/C++中用scanf对字符数组的输入,对整数、浮点数(单、双精度)的输入 ...输入时都以空白符作为分隔符 C++中 int a;double f; char s[100]
  • c语言写的按照指定分隔符进行字符串分割的函数。针对char*可以获得完美的结果。使用方便。
  • 字符串去除分隔符

    2021-03-09 15:17:16
    //算法1 #include <iostream> #include <fstream> #include <string> using namespace std; bool isValidHexadecimalChar(const char ascii_data) { bool result = false;...= '9') ||.
  • 本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第2.8节分隔符,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看 2.8 分隔符C语言源程序中可使用的分隔符有三个:空格、...
  • # 将windows路径中的分隔符\转换为unix(linux)的分隔符/ @staticmethod def transform_separator(windows_path): linux_path = '' if windows_path != '': path_list = windows_path.spli...
  • 三字组以两个连续问号开头,见上图。标准C语言还提供一些记号的重拼和定义一些运算符的宏替换的头文件,但与三字符组不同的是,这些替换无法在字符串型常量和字符型常量中识别。 源程序中三字符组的转换发生在词法...
  • C语言之格式占位

    2021-08-10 14:36:30
    1、格式占位(%) 是在C/C++语言中格式输入输出函数,其意义就是起到格式占位的意思,表示在该位置有输入或者输出 2、scanf的用法 scanf("<格式化字符串>",输入参数一,输入参数二 ); %d 输入十进制有符号...
  • C++ 带分隔符的输入

    2020-08-05 21:24:41
    } } 方法二 手动界定分隔符的位置 #include using namespace std; int main(){ string s; while(cin>>s){ vector<string>v; int pos = 0; int last = 0; while((pos = s.find(',',last))!=-1){ v.push_back(s....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,027
精华内容 17,610
关键字:

c语言分隔符

c语言 订阅