当前位置:编程学习 > C/C++ >>

[一个按标志分拆字符串的好方法]strtok函数简介及应用。

刚刚接触strtok函数,感觉十分神奇。
 
定义:
 
strtok
语法:
 
 
  #include <string.h>
  char *strtok( char *str1, const char *str2 );
功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。如果分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向作为标记的分隔符。之后所以的调用str1 都应为NULL。
 
例如:
 
 
 
[cpp]  
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 );  
   }  
这个样例的结果为:
 
result is "now "
result is " is the time for all "
result is " good men to come to the "
result is " aid of their country"
 
实现了通过'#'分拆的目的。
 
典型应用,如HDU 1106:点击打开题目链接
 
 要求按5为分割进行拆解字符串,并转换为字符串进行排序。一般的方法为直接模拟,但是如果灵活使用字符串分割函数strtok(注意它的返回值是指针),字符串转数字函数atoi(),这个题十分简单。
 
[cpp]  
#include <iostream>  
#include <algorithm>  
#include <cstring>  
#include <string>  
#include <string.h>  
#include <stdlib.h>  
using namespace std;  
  
bool cmp(int a,int b)  
{  
    return a<b;  
}  
  
int num[1009];  
  
int main()  
{  
    char tar[1009];  
    while(cin>>tar)  
    {  
        string numpack[1000];  
        memset(num,0,sizeof(num));  
        int pos=0;  
        int start=0,end=0;  
          
        char *temp;  
          
        temp=strtok(tar,"5");   //按5分开也  
          
        while(temp!=NULL)  
        {  
             numpack[pos]=temp;  
             temp=strtok(NULL,"5");  //基本用法 ,把指针存入数组中   
             pos++;              
        }   
          
          
          
        for(int i=0;i<pos;i++)  
        {  
            num[i]=atoi(numpack[i].c_str());  
        }  
              
        sort(num,num+pos,cmp);  
          
        for(int i=0;i<pos;i++)  
        {  
            cout<<num[i];  
            if(i!=pos-1)  
                cout<<" ";  
            else  
                cout<<endl;  
        }  
      
          
    }  
      
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,