Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-从字符串解析电话号码_C_Parsing_Token - Fatal编程技术网

C-从字符串解析电话号码

C-从字符串解析电话号码,c,parsing,token,C,Parsing,Token,我正试图从文件中提取电话号码并打印出来 输入 我的变量是 char *last_token; char *firstpart; char buffer[BUFFER_SIZE]; char *phoneNumber; 这是我当前的循环 while( fgets(buffer, BUFFER_SIZE, input) != NULL ){ last_token = strtok( buffer, " \n" ); while(last_token != NULL)

我正试图从文件中提取电话号码并打印出来

输入

我的变量是

char *last_token;
char *firstpart;
char buffer[BUFFER_SIZE];
char *phoneNumber;
这是我当前的循环

while( fgets(buffer, BUFFER_SIZE, input) != NULL ){
        last_token = strtok( buffer, " \n" );
        while(last_token != NULL) {
//see if first part of number is correct
            if(*last_token == '(' && isdigit(*(last_token + 1)) && isdigit(*(last_token + 2)) && isdigit(*(last_token + 3)) && *(last_token + 4) == ')' && *(last_token + 5) == '\0') {
                firstpart = last_token; //if it is save it
                last_token = strtok(NULL, " \n"); //check next part
//if second part is also correct
                if (isdigit(*last_token) && isdigit(*(last_token + 1)) && isdigit(*(last_token + 2)) && *(last_token + 3) == '-' && isdigit(*(last_token + 4)) && isdigit(*(last_token + 5)) && isdigit(*(last_token + 6)) && isdigit(*(last_token + 7)) && *(last_token + 8) == '\0') {
                    phoneNumber = firstpart; //set phone number to first part
                    strcat(phoneNumber, " "); //add a space to phone number
                    strcat(phoneNumber, last_token); //add the last part of the phone nmber

                    printf("%s\n", phoneNumber); //print the number
                }
            }
            last_token = strtok(NULL, " \n");
        }

}
它应该是印刷品

(123) 456-7897
(654) 393-3030
但它的印刷

(123)
(654)
我猜字符串会在结束后被终止),但我不知道为什么

strcat(phoneNumber, " ");
这是用
'\0'
重写到
最后一个\u标记的开头

char phoneNumber[15];
...
strcpy(phoneNumber, firstpart);
strcat(phoneNumber, " ");
strcat(phoneNumber, last_token);
printf("%s\n", phoneNumber);
char phoneNumber[15];
...
strcpy(phoneNumber, firstpart);
strcat(phoneNumber, " ");
strcat(phoneNumber, last_token);
printf("%s\n", phoneNumber);