#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdbool.h>
int getDegreeOfNumber(int number, int degree);
int getNaturalValue();
int stringLength(char* str);
void getString(char** str);
void showString(char* str);
void doCondition(char** str, int k);
void doProgram();
int main() {
setlocale(LC_ALL, "ru_RU");
doProgram();
return 0;
}
int getDegreeOfNumber(int number, int degree) {
int result = 1;
for (int i = 0; i < degree; i++)
result *= number;
return result;
}
int getNaturalValue() {
#define MAX_STRING_SIZE 255
int stringValueSize = 0, checker, value = 0;
char stringValue[MAX_STRING_SIZE], temp;
while (true) {
printf("Введите натуральное значение: ");
gets(stringValue);
checker = true;
for (int i = 0; i < MAX_STRING_SIZE; i++) {
temp = stringValue[i];
if (temp == '\0') {
stringValueSize = i;
break;
}
if (temp < '0' || temp > '9') {
checker = false;
break;
}
}
if (checker) {
for (int i = 0; i < stringValueSize; i++) {
value += (stringValue[i] - '0') * getDegreeOfNumber(10, stringValueSize - i - 1);
}
if (value > 0)
break;
}
printf("Вы ввели неверное значение.\nПопробуйте ещё раз!\n\n");
value = 0;
}
return value;
}
int stringLength(char* str) {
int length = 0;
while (str[length] != '\0') {
length++;
}
return length;
}
void getString(char** str) {
int length = 0;
char ch;
*str = NULL;
printf("Введите строку: ");
while ((ch = getchar()) != '\n') {
*str = (char*)realloc(*str, (length + 1) * sizeof(char));
(*str)[length++] = ch;
}
*str = (char*)realloc(*str, (length + 1) * sizeof(char));
(*str)[length] = '\0';
}
void showString(char* str) {
printf("Строка: %s\n", str);
}
void doCondition(char** str, int k) {
int wordCount = 0;
char* start = *str;
char* end = *str;
while (*end != '\0') {
while (*start == ' ' && *start != '\0') start++;
if (*start != '\0') {
wordCount++;
if (wordCount == k) {
end = start;
while (*end != ' ' && *end != '\0') end++;
char* dest = start;
while (*end != '\0') {
*dest = *end;
dest++;
end++;
}
*dest = '\0';
int newLength = stringLength(*str);
*str = (char*)realloc(*str, (newLength + 1) * sizeof(char));
return;
}
while (*end != ' ' && *end != '\0') end++;
start = end;
}
}
printf("Ошибка: слово с индексом %d не найдено в строке.\n", k);
}
void doProgram() {
char* str;
int k;
getString(&str);
showString(str);
k = getNaturalValue();
doCondition(&str, k);
showString(str);
free(str);
}
Пишу код. Он принимает строку, а потом удаляет k-ое слово. Проблема в том, что строки на русском он выводит непонятно как, с английским же проблем нет. setlocale сделал (это видно по консоли)