Помогите исправить код на языке C
#include < stdio.h >
#include < string.h >
#include < stdlib.h >
void split_substring(char *line){
char *words[3];
int temp,n1=0;
for(int i=0;i<sizeof(line);i++){
while(line[i]!=' ' && line[i+1]!='-' && line[i+2]!=' '){
i++;
}
words[0]=malloc(sizeof(char)*i);
memcpy(words[0],line,sizeof(char)*i);
temp=i;
while(line[i]!=' ' && line[i+1]!='=' && line[i+2]!=' '){
i++;
}
words[1]=malloc(sizeof(char)*(i-temp));
memcpy(words[1],&line[temp+2],sizeof(char)*(temp-i));
words[2]=malloc(sizeof(char)*(1));
memcpy(words[1],&line[sizeof(line)-1],sizeof(char)*(1));
}
printf("%s %s %s\n", words[0],words[1],words[2]);
}
int main() {
char line[] = "Он не готовит. - He is not cooking. = 0";
split_substring(line);
return 0;
}
Я хочу переписать одну программу которую я реализовал на пайтоне в C.
не получается разделить строку на подстроки используя разделители в пайтон это.
words=re.split(" - | = ",line) ;
В си нет такой функции. В СИ есть strtok но дело в том что он разделает не по (пробел-тире-пробел), а по пробелу и тире.
words=re.split(" - | = ",line) ; разделяет его на три подстроки в котором могут находиться несколько слов.
А C разделит на отдельные слова или если -= указывать как разделитель то он оставит пробелы к словам. Например "Он не готовит. ", а должен
"Он не готовит."
Но это не самое худшее . Если использовать вложенный strtok то внешний strtok сломается (если нужно разделять массив по /n , а внутри цикла разделять эту строку на подстроки) .
Вообщем придëтся писать отдельную функцию.
Но она не работает. А chat gpt предлагает strtok который не работает как мне нужно.
И я не знаю нужно ли в последнем выделять два байта. (Его нужно преобразовать в числа)
for(int i=0;i<sizeof(line);i++)
Вот это уже писец. Если вы думаете, что sizeof(line) вернет вам длину строки то вы ну ОЧЕНЬ сильно заблуждаетесь! Вам нужна функция strlen, причем ее не следует включать в цикл for, следует использовать в цикле ее результат (потому что для вычисления длины она ПОЛНОСТЬЮ проходит всю строку от начала и до конца).
По хорошему же, всю вашу функцию надо полностью и тотально переделывать. То, что вы пытаетесь сделать, делается совсем не так.
"Он не готовит. - He is not cooking. = 0"
Не указан нужный конечный вид строки.