1. 程式人生 > >9、strchr函式&strtok函式&strdup使用

9、strchr函式&strtok函式&strdup使用

題意: 將字串abcddd#123#gaghah#345#fdsafa#345#中把#之間的數字串替換成對應的字母串

123===》defd

345===》fdse

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<string.h>
using namespace std;
int main()
{
    char *str="abcddd#123#gaghah#345#fdsafa#345#";
    char *token,*pch,*strps=NULL;
    int *arry;
    int i=0,j=0;
    arry=(int *)malloc(sizeof(int)*strlen(str));
    memset(arry,0,strlen(str));
    pch=strchr(str,'#'); //查詢某個字元的位置 strstr 查詢某個字串的位置
    while(pch!=NULL) {
        if(i%2==0) {
            arry[j]=pch-str;
            j++;
        }
        i++;
        pch=strchr(pch+1,'#');
    }
    i=0;
	char *s;
	s=(char*)malloc(sizeof(char)*strlen(str));
    char *st=strdup(str);
    token=strtok(st,"#"); //字串分割 但是 一般使用strtok_r 保證執行緒安全
    while(token!=NULL) {
        if(token-st-1==arry[i]){
			strcat(s,token);//此處需要replace 函式 此程式碼暫不做處理 只做講解
			i=i+2;
		} else {
			strcat(s,token);
		}
        token=strtok(NULL,"#");
    }
  cout<<s<<endl;
    return 0;
}