There is a definition for dtmfbuf already. char dtmfbuf[300]; These are the 5 possible strings that will appear in dtmfbuf *002044896227# *002044896227#*6045551212# *002044896227#*06045551212# *1381537359#*002044896227#*3592943431012# *1581537359#*002044896227#*3592943431012# Here are the variables I need populated. All must be strings. No functions can be used. IXC_PRESUB IXC_ANI IXC_DNIS IXC_INTL IXC_CIC IXC_OZZ IXC_COUNTRY IXC_OPERATOR IXC_CUTTHROUGH *AABBBBBBBBBB# - source # *AABBBBBBBBBB#*CCCCCCCCCC# - source # dest # *AABBBBBBBBBB#*DCCCCCCCCCC# - source # dest # *EEEFFFFGGG#*AABBBBBBBBBB#*CCCCCCCCCCCCC# - intl # source # dest # AA = IXC_PRESUB BBBBBBBBBB = IXC_ANI CCCCCCCCCC = IXC_DNIS D = IXC_OPERATOR ("0" = yes, everything else = no) EEE = IXC_OPEATOR ("138" = no, "158" = yes) FFFF = IXC_CIC GGG = IXC_COUNTRY Here is how I would handle this. You may choose to do it differently. part_source char[100]; part_dest char[100]; part_intl char[100]; IXC_PRESUB = "0"; IXC_ANI = "" IXC_DNIS = "" IXC_INTL = "0" IXC_CIC = "1537"; IXC_OZZ = ""; IXC_COUNTRY = "1"; IXC_OPERATOR = "0"; IXC_CUTTHROUGH = "0"; if (strlen(dtmfbuf) == 14) { /* *AABBBBBBBBBB# - source # */ part_source = dtmfbuf; part_dest[0] = 0; part_dest[0] = 0; IXC_CUTTHROUGH = "1"; IXC_PRESUB = substr(part_source ,1,2); - AA IXC_ANI = substr(part_source ,3,10); - BBBBBBBBBB } else if (strlen(dtfmbuf) < 28) { /* *AABBBBBBBBBB#*CCCCCCCCCC# - source # dest # */ /* *AABBBBBBBBBB#*DCCCCCCCCCC# - source # dest # */ part_source = strsep(&dtmfbuf,"#"); part_dest = strsep(&dtmfbuf,"#"); IXC_PRESUB = substr(part_source ,1,2); - AA IXC_ANI = substr(part_source ,3,10); - BBBBBBBBBB If substr(part_dest,2,1) == '0' { - D IXC_OPERATOR = "1"; IXC_DNIS = "1"+substr(part_dest,2,10); - CCCCCCCCCC } else { IXC_DNIS = "1"+part_dest; - CCCCCCCCCC } } else if (strlen(dtmfbuf) > 28) { /* *EEEFFFFGGG#*AABBBBBBBBBB#*CCCCCCCCCCCCC# - intl # source # dest # */ part_intl = strsep(&dtmfbuf,'#'); part_source = strsep(&dtmfbuf,"#"); part_dest = strsep(&dtmfbuf,"#") IXC_INTL = "1"; IXC_OZZ = substr(part_intl,2,3); - EEE IXC_CIC = substr(part_intl,5,4); - FFFF IXC_COUNTRY = substr(part_intl,9,3) - GGG IXC_PRESUB = substr(part_source ,1,2); - AA IXC_ANI = substr(part_source ,3,10); - BBBBBBBBBB IXC_DNIS = "011"+part_dest; - CCCCCCCCCC IF (IXC_OZZ == "158") { IXC_OPERATOR = "1"; } } Example 1: *002044896227# - Cut Through IXC_PRESUB="00" IXC_ANI=2044896227 IXC_DNIS="" IXC_INTL="0" IXC_CIC="1537" IXC_OZZ="" IXC_COUNTRY="1" IXC_OPERATOR="0" IXC_CUTTHROUGH="1" Example 2: *002044896227#*6045551212# - Dial-Around IXC_PRESUB="00" IXC_ANI=2044896227 IXC_DNIS="6045551212" IXC_INTL="0" IXC_CIC="1537" IXC_OZZ="" IXC_COUNTRY="1" IXC_OPERATOR="0" IXC_CUTTHROUGH="0" Example 3: *002044896227#*06045551212# - Dial-Around Operator IXC_PRESUB="00" IXC_ANI=2044896227 IXC_DNIS="6045551212" IXC_INTL="0" IXC_CIC="1537" IXC_OZZ="" IXC_OPERATOR="1" IXC_COUNTRY="1" IXC_CUTTHROUGH="0" Example 4: *1381537359#*002044896227#*3592943431012# - Dial-Around International IXC_PRESUB="00" IXC_ANI=2044896227 IXC_DNIS="3592943431012" IXC_INTL="0" IXC_CIC="1537" IXC_OZZ="138" IXC_COUNTRY="359" IXC_OPERATOR="0" IXC_CUTTHROUGH="0" Example 5: *1581537359#*002044896227#*3592943431012# - Dial-Around International - Operator IXC_PRESUB="00" IXC_ANI=2044896227 IXC_DNIS="3592943431012" IXC_INTL="0" IXC_CIC="1537" IXC_OZZ="158" IXC_COUNTRY="359" IXC_OPERATOR="1" IXC_CUTTHROUGH="0"