Удалить два последним слова из строки, в которой слова разделяются одним или несколькими пробелами - C (СИ) (71820)
Формулировка задачи:
задача: удалить два последним слова из строки, в которой слова разделяются одним или несколькими пробелами
я писала программу для слов разделяющихся одним пробелом
как можно переписать эту задачу с функцией strtok()? или еще как нибудь, подскажите пожалуста
#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();
}Решение задачи: «Удалить два последним слова из строки, в которой слова разделяются одним или несколькими пробелами»
textual
Листинг программы
#include <stdio.h>
#define M 4
#define N 6
void twoarray (unsigned short [], int, unsigned short [], int);
void main(void)
{
unsigned short f[M] = { 145, 134, 3, 1};
unsigned short g[N] = { 114, 44, 43, 39, 22, 11 };
twoarray (f, M, g, N);
return;
}
void twoarray (unsigned short one [], int m, unsigned short two [], int n)
{
unsigned short fgh[m+n]; //размер 1 и 2 массива
int x, y, i;
x = y = i = 0;
while(i < m + n){
if(x < m && y < n){
if(one[x] >= two[y])
fgh[i] = one[x++];
else if(two[y] >= one[x])
fgh[i] = two[y++];
}
//////////////////
else if(x >= m && y < n)
fgh[i]= two[y++];
else if(x < m && y>= n)
fgh[i] = one[x++];
printf("%d ",fgh[i++]);
}
return;
}
Объяснение кода листинга программы
В этом коде используется функция twoarray, которая принимает два массива целых чисел и объединяет их в один массив. Этот код не удаляет последние два слова из строки, разделенной пробелами, как указано в задаче. Вместо этого он берет элементы из двух массивов и помещает их в новый массив, но сохраняет только уникальные элементы. Это означает, что если элемент уже присутствует в новом массиве, он не будет повторен. Алгоритм работает следующим образом:
- Создается новый массив fgh размером m+n, где m и n - размеры исходных массивов.
- Используется цикл while для прохода по всем элементам массива one и two.
- Если индексы x и y в пределах своих массивов, то выполняется следующее:
- Если элемент one[x] больше или равен элементу two[y], то элемент one[x] добавляется в массив fgh, а x увеличивается на 1.
- Если элемент two[y] больше или равен элементу one[x], то элемент two[y] добавляется в массив fgh, а y увеличивается на 1.
- Если x больше или равно m, а y меньше или равно n, то элемент two[y] добавляется в массив fgh, а y увеличивается на 1.
- Если x меньше или равно m, а y больше или равно n, то элемент one[x] добавляется в массив fgh, а x увеличивается на 1.
- Каждый i-й элемент массива fgh выводится на консоль с помощью printf. Этот код не удаляет последние два слова из строки, разделенной пробелами.