Изменение двойной указатель типа char в указатель типа int
Я должен изменить приведенный ниже код, превратив char** end в findInteger в int* end
int findInteger(const char str[81], char** end) { int i = (int)(*end - str), j = 0; bool isNum = false; char str1[40]; char prev = ' '; //instead of str[0], if number at beginning while (str[i]) { if (isdigit(str[i])) { if (!isNum && (prev == ' ' || prev == '\t' || prev == ',' || prev == '.' || prev == '!' || prev == '\0')) isNum = true; if (isNum) { str1[j] = str[i]; j += 1; } } else { if (isNum) { if (str[i] == ' ' || str[i] == '\t' || str[i] == ',' || str[i] == '.' || str[i] == '!' || str[i] == '\0') { str1[j] = 0; *end = (char*)&(str[i]); return atoi(str1); } else { isNum = false; j = 0; } } } prev = str[i]; i += 1; } if (isNum) { str1[j] = 0; *end = (char*)&(str[i]); return atoi(str1); } *end = (char*)&(str[i]); return NULL; } int getNumbers(const char str[81], int numbers[40]) { char* end = (char*)str; int c = 0, num; while (*end) { if ((num = findInteger(str, &end)) != NULL) { numbers[c] = num; c += 1; } } return c; //return 0; } int main() { char string[20][81]; int string_count; input_printf("Input number of lines (integer in the range [1,20]): \n"); scanf("%d", &string_count); scanf("%*1[\n]"); if (string_count < 1 || string_count > 20) { error_printf("invalid input data"); return 0; } input_printf("Input text: \n"); for (int i = 0; i < string_count; i++) { gets_s(string[i]); } for (int i = 0; i < string_count; i++) { int num[40]; int length1 = getNumbers(string[i], num); if (length1 == 0) { error_printf("no solution"); } else { //printf("%d\n", length1); for (int j = 0; j < length1; j++) printf("%d ", num[j]); printf("\n"); } return 0; } }
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include "str_unit.h" #include "testing.h" #pragma warning(disable : 4996) int findInteger(const char str[81], int* end) { int i = strlen(str), j = 0; bool isNum = false; char str1[40]; char prev = ' '; //instead of str[0], if number at beginning while (str[i]) { if (isdigit(str[i])) { if (!isNum && (prev == ' ' || prev == '\t' || prev == ',' || prev == '.' || prev == '!' || prev == '\0')) isNum = true; if (isNum) { str1[j] = str[i]; j += 1; } } else { if (isNum) { if (str[i] == ' ' || str[i] == '\t' || str[i] == ',' || str[i] == '.' || str[i] == '!' || str[i] == '\0') { str1[j] = 0; end = (int*)&(str[i]); //return atoi(str1); } else { isNum = false; j = 0; } } } prev = str[i]; i += 1; } if (isNum) { str1[j] = 0; end = (int*)&(str[i]); //return atoi(str1); } end = (int*)&(str[i]); } int getNumbers(const char str[81], int numbers[40]) { int end = atoi(str); int c = 0, num; while (end) { if ((num = findInteger(str, &end)) != NULL) { numbers[c] = num; c += 1; } } return c; } int main() { char string[20][81]; int string_count; input_printf("Input number of lines (integer in the range [1,20]): \n"); scanf("%d", &string_count); scanf("%*1[\n]"); if (string_count < 1 || string_count > 20) { error_printf("invalid input data"); return 0; } input_printf("Input text: \n"); for (int i = 0; i < string_count; i++) { gets_s(string[i]); } for (int i = 0; i < string_count; i++) { int num[40]; int length1 = getNumbers(string[i], num); if (length1 == 0) { error_printf("no solution"); } else { //printf("%d\n", length1); for (int j = 0; j < length1; j++) printf("%d ", num[j]); printf("\n"); } return 0; } }
Но это все равно не работает, и главная проблема исходит от функции getInteger
Garth J Lancaster
"Но это все равно не работает" - возможно, вы хотели бы использовать "улучшить вопрос" и показать/указать, почему он не работает или что вы получаете за различные входные данные - мы не можем читать ваш экран или ваш разум