Member 14068859 Ответов: 2

Моя проблема заключается в ошибке


в основной функции в "тестовых тестах" есть ли у меня ошибка
"значение типа const char* не может быть использовано".
что же мне делать!!
у меня нет никакого суджестиона. я попробовал Уит кастинг , но ничего не вышло!!

Что я уже пробовал:

#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char* extract(char* input) {
	char* ptr;
	ptr = strstr(input, "::");
	char* answer;

	if (isprint(*ptr) == 0) {
		answer = input;
	}
	else {
		while (ptr != NULL) {
			answer = ptr;
			ptr = strstr(ptr + 1, "::");

		}
		answer += 2;
	}
	printf("%s\n", answer);
	return answer;
}
// Ueberspringe alle Leerzeichen
// Rueckgabe ist Zeiger auf das erste Nichtleerzeichen
char* leerzeichen(char* input) {
	while (*input == ' ')
		input++;
	return input;
}

// Scanne durch string solange bis wir auf ein
// Leerzeichen oder das Ende des Strings treffen.
// Effektiv ueberspringen wir ein Wort.
// Rueckgabe: Zeiger auf Ende oder Leerzeichen.
char* zeichen(char* input) {
	while (*input != '\0' && *input != ' ')
		input++;
	return input;
}


int count(char* input) {
	int cnt = 0;

	// Solange das Ende nicht erreicht ist:
	// 1. Ueberspringe alle Leerzeichen
	// 2. Falls Zeichen gefunden
	//     (a) setze Zaehler hoch
	//     (b) Gehe zu Wortende

	while (*input != '\0') {
		input = leerzeichen(input);
		if (*input != '\0') {
			cnt++;
			input = zeichen(input);
		}
	}
	return cnt;
}


typedef enum {
	OK,
	FAIL
} Test;

Test testCount(char* input, int expected) {
	Test t;

	if (expected == count(input)) {
		t = OK;
	}
	else {
		t = FAIL;
	}
	return t;
}


typedef struct {
	char* input;
	int expected;
} TestCase;


void runTests(int no, TestCase test[]) {
	Test t;
	int i;

	for (i = 0; i < no; i++) {
		printf("Test %d: ", i);
		t = testCount(test[i].input, test[i].expected);
		if (OK == t)
			printf("OK \n");
		if (FAIL == t)
			printf("FAIL \n");
	}
}

#define ARRAY_SIZE 9
int main() {
	const int testNo = ARRAY_SIZE;
	TestCase tests[ARRAY_SIZE] = {
		 <big>{"", 0},
		 {"Hallo", 1},
		 {"  Hallo", 1},
		 {"Hallo", 1},
		 {"  Hallo  ", 1},

		 {"Hal lo", 2},
		 {" Hal lo", 2},
		 {"Hal lo ", 2},
		 {" Hal lo  ", 2}
	};</big>	runTests(testNo, tests);

}

2 Ответов

Рейтинг:
0

Richard MacCutchan

Попробуйте изменить определение TestCase следующим образом:

typedef struct {
	const char* input;
	int expected;
} TestCase;


Member 14068859

Спасибо

Рейтинг:
0

OriginalGriff

Я копирую и вставляю ваш код в онлайн-систему C++, и он работает: https://www.onlinegdb.com/online_c++_компилятор[^]

Он компилируется чисто, он работает, и я получаю:

Test 0: OK 
Test 1: OK 
Test 2: OK 
Test 3: OK 
Test 4: OK 
Test 5: OK 
Test 6: OK 
Test 7: OK 
Test 8: OK

Так... нам нужно было бы знать, какой компилятор, какая строка и так далее.

Кроме того, измените структуру TestCase так, чтобы она принимала строки const:
typedef struct {
	const char* input;
	int expected;
} TestCase;
Однако вам придется сопоставить это со всеми вашими вызовами функций, иначе они не будут компилироваться!


Member 14068859

Спасибо

OriginalGriff

Всегда пожалуйста!