我的程式的目標是決議字串“Ge34eks-f10or-Gee59ks”。它通過使用 strtok 將分隔符“-”拆分為三個標記 Ge34eks、f10or 和 Gee59ks。每個標記都被傳遞到 num_extraction 函式中,目的是從每個標記中獲取數字:34、10、59。我想在每個標記的數字之間保留空格,因此它們將存盤在一個陣列中,每個數字之間都有一個零: [34、0、10、0、59]。嘗試列印陣列時沒有出現。注意:while 回圈處理第二個和第三個標記,因此如果將其注釋掉,則正確列印第一個標記號 34。
具體問題:什么都沒有列印?并且沒有給出錯誤猜測:我的計數變數有問題或者我的陣列沒有正確存盤數字。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int* num_extraction(char* a, int* arr, int* index)
{
char* p = a;
//int i = 0;
while (*p)
{ // While there are more characters to process...
if (isdigit(*p) || ((*p == '-' || *p == ' ') && isdigit(*(p 1))))
{
// Found a number
arr[*index] = strtol(p, &p, 10); // Read number
//printf("%d\n", val); // and print it.
*(index) ;
}
else
{
// Otherwise, move on to the next character.
p ;
}
}
return arr;
}
int main()
{
char str[] = "Ge34eks-f10or-Gee59ks";
int array[100] = { 0 };
//int* p = array;
int count = 0;
int* q = &count;
// Returns first token
char *token = strtok(str, "-");
num_extraction(token, array, q);
count = 2;
// Keep printing tokens while one of the
// delimiters present in str[].
while (token != NULL) // problem starts here if loop is commented out first token number is printed
{
//printf("%s\n", token);
token = strtok(NULL, "-");
num_extraction(token, array, q);
count = 2;
}
for(int i = 0; i < count; i )
{
printf("%d\n", array[i]);
}
//printf("%d\n", count);
return 0;
}
版本 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char* char_extraction(char* a, char* arr, int* index)
{
char* p = a;
for( int i = 0; i < strlen(p); i )
{
printf("%s\n", "test"); // ISSUE: ONLY PRINTS TWICE?
if(isalpha(p[i]))
{
arr[*index] = p[i];
//printf("%c\n", arr[*index]);
*(index) ;
}
}
return arr;
}
int main()
{
char str[] = "Ge34eks-f10or-Gee59ks";
int array[100] = { 0 };
char array1[100] = "";
int count1 = 0;
int* r = &count1;
// Returns first token
char *token = strtok(str, "-");
char_extraction(token, array1, r); // called once
count1 = 2;
// Keep printing tokens while one of the
// delimiters present in str[].
while ((token = strtok(NULL, "-")) != NULL)
{
char_extraction(token, array1, r); // should be called twice
count1 = 2;
}
for(int i = 0; i < count1; i )
{
printf("%c\n", array1[i]);
}
//printf("%d\n", count);
return 0;
}
uj5u.com熱心網友回復:
看這里 - 查看行內評論
while (token != NULL)
{
// token not null here from last loop
token = strtok(NULL, "-");
// now token is null if last
num_extraction(token, array, q);
count = 2;
}
你需要做
// get next token then test if NULL
while ((token = strtok(NULL, "-")) != NULL)
{
num_extraction(token, array, q);
count = 2;
}
要么
// get next token then test if NULL
for(;;)
{
token = strtok(NULL, "-");
if(token == NULL) break;
num_extraction(token, array, q);
count = 2;
}
甚至
while (token = strtok(NULL, "-"))
{
//printf("%s\n", token);
num_extraction(token, array, q);
count = 2;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430752.html
下一篇:需要指標時避免創建命名變數
