Удалить два последним слова из строки, в которой слова разделяются одним или несколькими пробелами - C (СИ)

  1. работа со строками! задача: удалить два последним слова из строки, в которой слова разделяются одним или несколькими пробелами я писала программу для слов разделяющихся одним пробелом Код CC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> #include <string.h>   int main(void) {       char *s;       char delimiter = ' ';       int i;      printf ("vvedite stroku:   ");    gets(s);       // считываем введенную строку, заносим в string     {for (i = strlen(s); *(s+i) != delimiter && i; i--);     s[i]='\0';     }     {for (i = strlen(s); *(s+i) != delimiter && i; i--);     s[i]='\0';     }    printf ("stroka bez dvuh slov   ");    printf("%s\n", s); // выводим полученную строку    return 0;    getch(); }как можно переписать эту задачу с функцией strtok()? или еще как нибудь, подскажите пожалуста


textual

Код:

    
short count = 0;
char delimiter = ' ';
char *c;
for (c = s + strlen(s)-2; c != s; c--)
        if(*c == delimiter && *(c+1) != delimiter)
            if(++count == 2) break;
 
    *c = '\0';


Похожие ответы
  1. Возможно ли это сделать на базовом уровне, понятном для понимания школьнику

  1. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #define _CRT_SECURE_NO_WARNINGS #include * #include struct sportsmen{     char FirstName[32];     int number[10], points[128]; }; void read(struct sportsmen *sportsmen, int i) {     for (int j = 0; j < i; j++){         printf("enter FirstName \n");         scanf("%s", &sportsmen[j].FirstName);         printf("enter number \n");         scanf("%i", &sportsmen[j].number);         printf("enter points \n");         scanf("%i", &sportsmen[j].points);     } } int main() {     setlocale(LC_ALL, "ukr");     struct sportsmen sportsmen[5];     read(sportsmen, 5);     FILE *f, *fdell;     if ((f = fopen("f.txt ", "wb")) == NULL)     {         printf("Помилка при відкритті файлу");         return 1;     }     } Нашел в интернете код C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 #define _CRT_SECURE_NO_WARNINGS   #include #include #include #include   char c; struct sports { char fam[20]; int number, score; } spr; void inputdata(FILE *); void updatedata(FILE *); void printdata(FILE *); void deletedata(FILE *);   void inputdata(FILE *st) {     char ch;     st = fopen("file1.dat", "wb");     do     {         printf("\nВведите данные спортсмена через пробел - фамилия, номер, количество набранных очков.\n");         scanf("%s%d%d", spr.fam, &spr.number, &spr.score);         fwrite(&spr, sizeof(spr), 1, st);         printf("\nЗакончить ввод данных?\n");         ch = getch();     } while (ch != 'y');     fclose(st);     system("cls");     printf("Данные о спортсменах записаны!\n"); }   void printdata(FILE *st) {     system("cls");     int i;     st = fopen("file1.dat", "rb");     i = 1;     fread(&spr, sizeof(spr), 1, st);     while (!feof(st))     {         printf("\n%d. Фамилия спортсмена: %s, номер: %d, количество очков: %d", i, spr.fam, spr.number, spr.score);         fread(&spr, sizeof(spr), 1, st);         i++;     }     printf("\n\nНажмите любую клавишу для выхода в меню.\n");     getch();     system("cls"); }   void updatedata(FILE *st) {     char ch;     st = fopen("file1.dat", "ab");     do     {         printf("\nВведите данные о спортсмене через пробел - фамилия, номер, количество набранных очков.\n");         scanf("%s%d%d", spr.fam, &spr.number, &spr.score);         fwrite(&spr, sizeof(spr), 1, st);         printf("\nЗакончить добавление данных? y/n\n");         ch = getch();     } while (ch != 'y');     fclose(st);     system("cls"); }   void deletedata(FILE *st) {     system("cls");     char ch;     int i, n, min;     sports *p, temp;     st = fopen("file1.dat", "rb");     n = 0;     fseek(st, 0, 2);     n = ftell(st) / sizeof(sports);     fseek(st, 0, 0);     p = (sports *)malloc(n*sizeof(sports));     for (i = 0; i

  1. Дана строка предложение. Удалить из строки все лишние пробелы: в начале, в конце, повторяющиеся. Не могу понять, как удалить все пробелы в начале и в конце. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include   #include   int main(int argc, char *argv[]) { setlocale(LC_ALL,""); char str[101]; printf ("Введите строку:"); gets(str);   int j=1;   for (int i=1; str[i]!=0; i++) {      if((str[i] == ' ') && (str[i-1]==' ')) continue;      str[j++] = str[i]; }     if (str[j-1]==' ') j--;   str[j] = 0;   printf("Результат:");  puts(str); }

  1. дан двумерный массив, вставить в него два столбца из чисел 1: один после К1-го столбца. второй-перед К1-м столбом.

  1. надо что бы он прочитав последнею букву в предложение удалял все такие же буквы в самом предложение кроме нее самой!C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include   int main() {     char str[50];     gets(str);     int i,j;     char tmp=str[strlen(str)-1];     for (i=0;i

  1. дан двумерный массив, вставить в него два столбца из чисел 1: один после К1-го столбца. второй-перед К1-м столбом.

  1. Дано предложение, слова в котором разделены пробелами. Составить из него два предложения по правилу: на первое переписать все четные по порядку слова, а во второй - нечетные. Пожалуйста, выручите, могу посчитать количество слов, а вот это задание мозг выедает)

  1. Дано предложение. Удалить из каждого слова все повторяющиеся буквы, т.е. в каждом слове должны остаться только различные буквы.

  1. Здравствуйте! Собственно сам вопрос в заголовке. Сделал что-то такое, но не всегда правильно работает:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include #include #include   int main(){       srand(time(NULL));       int N;       printf("N=");       scanf("%d",&N);         int *tab=(int*)malloc(sizeof(int)*N);         int element;            for(int i=0;i

  1. Нужно удалить все элементы односвязанного списка и пришло вот такое решение: C1 2 3 4 5 6 7 8 9 10 ... void dall(LISTNODEPTR startPtr) {     if (startPtr!=NULL)     {         dall(startPtr->nextPtr);         delete (startPtr);     } } ...но проблема в том, что функция delete не работает и выкидывает программу. Что делать и почему так происходит? P.S. free работает так же