Как удалить слово из строки c
Перейти к содержимому

Как удалить слово из строки c

  • автор:

Как удалить слово из строки c

Регистрация: 27.03.2018

Сообщений: 21

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

Задание:В символьной строке удалить все слова, которые содержат буквы, не входящие в
разрешенный набор символов.
разрешённый набор: ‘a’ , ‘A’ , ‘H’ ,’h’ , ‘c’.
ограничения:слово-это только буквы, в нём не должно быть цифр и др. символов кроме букв.
я не знаю какое условие использовать для ограничения, написал что разделители всё кроме слов и поставить вместо них пробел,но что-то не выходит.
подскажите в чём ошибка или как сделать иначе,спасибо.

#include #include // определение символических констант #define YES 1 #define NO 0 #define MAXLINE 1000 int main() < char line[MAXLINE]; char *line_ptr; // указатель на текущий символ буфера char *end; // указатель на конец слова char *begin; // указатель на начало слова char c; // текущий символ int flag; // признак слова int found; // признак того, что запрещённые буквы присутстувют в слове char *src; char *dst; flag = NO; found = NO; line_ptr = line; begin = line; end = line; printf("String:"); if ( !fgets(line, sizeof(line), stdin) ) // прочитать строку, если неудачно - выход с ошибкой exit(1); if ( *line == '\n' ) //если строка пустая - на выход exit(0); // цикл чтения символов из строки do < c = *line_ptr; // взять текущий символ из массива if ( (c'z') && (c'Z') ) //проверка на разделители < *line_ptr=' ';//т.к. нам не нужны лишние символы заменяем их на пробел if( flag == YES ) < // найден разделитель end = line_ptr - 1; // запомнить указатель на конец слова if( found == YES ) < //найдены запрещённые буквы слово нужно удалить *src = *end + 1; *dst = *begin; while( (*dst++ = *src++ ) != '\0' );//удаление слова line_ptr = begin; // начать обработку строки сперенесённого фрагмента >> flag = NO; > else < //найдена буква if( flag == NO ) begin = line_ptr; // запомнить указатель на начало слова if( c != 'a' && c != 'A' && c != 'H' && c != 'h' && c != 'c' ) //проверка на наличие разрешённых букв в слове < found = YES; flag = YES; >else found=NO; > line_ptr++; // продвинуть вперёд указатель на текущий символ > while( c != '\0' ); printf("Result: "); puts(line); return 0; >

Удаление слов из строки

Author24 — интернет-сервис помощи студентам

С клавиатуры ввести предложения. Вытереть с него слово, порядковый номер которого задает пользователь. Если номер слова превышает реальное количество слов в предложении, то вывести соответствующее сообщение.

Помогите дописать код. Вот начал писать и не знаю что дальше.
Заранее спасибо.

1 2 3 4 5 6 7 8 9 10 11
#include int i, j, m; char p[]={"C - universal language programming general appointment, developed in 1972 year by Denis Ritchie \0"}; int main() { printf("%s",p); printf("\nEnter the word number: "); scanf("%d", &m); if(p[i]==m){ p[i]=p[i]  1; } printf("%s",p[i]);

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Удаление слов из строки.
Необходимо реализовать на языке Си функцию удаление нечетных слов из строки. void.

Выполнить удаление из строки слов, содержащих только малые латинские буквы
не магу понять почему номера оставленных слов выводится правильно а в строку s2 не записывается.

Как отсортировать строки по кол-ву слов и слова в строке по длине слов
Суть задания:Вводить последовательность не более чем 256 символов,ввод заканчивается.

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

Регистрация: 10.12.2017
Сообщений: 178

Добавлено через 20 часов 1 минуту
Вот переписал код. Но есть одна проблема удаляется только символ, а надо целое слово

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include int k, n, nc; int main() { char st[] = {"C is a universal programming language, developed in 1972 by Denis Ritchie"}; printf("Vvedit nomer chisla: "); scanf("%d", &k); if(st[n] != ' '){ while(st[n] != '\0') { if (st[n] == k){ n++; } else{ st[n] = st[k]; n++; k++; } } } st[k] = '\0'; printf("%c: %s\n", k, st); return 0; }

Регистрация: 10.12.2017
Сообщений: 178

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include #include char a[5][15] = {"C", "is", "a", "universal", "programming"}; char b[4][15]; int i, j, k, m; int main(){ printf("\nVvedit chislo: "); scanf("%d", &m); for(i=0; i5; i++){ if (i != m) { a[i][j]=b[i][j]; } } printf("%s",b); }

Как удалить слово из строки c

Задано предложение и слово. Удалить из предложения k-ое вхождение слова в него. Если такого вхождения нет, то удалить последнее вхождение.
вот на этом у меня ступор произошел
Screenshot_3.jpg

#define _CRT_SECURE_NO_DEPRECATE #include #include int main(int argc, char *argv[]) < char str1[160], temp[160], str2[160], temp1[160]; printf("Vvedite predlojenie: "); gets(str1); printf("Vvedite slovo: "); gets(str2); char *str3 = strtok(str1, " "); int k = 0, l = 0; printf("Vvedite # vhojdenia: "); scanf("%d", &k); int nom = 0; while (str3) < int t = (strcmp(str3, str2)); if (t == 0) < nom++; l = nom; if (nom == k) str3 = ""; >strcat(temp, str3); strcat(temp, " "); str3 = strtok(NULL, " "); > if (nom != k) < char *str4 = strtok(temp, " "); while (str4) < int t = (strcmp(str4, str2)); if (t == 0) < l = 0; l++; if (l == nom) < str4 = ""; >> strcat(temp1, str4); strcat(temp1, " "); str4 = strtok(NULL, " "); > > printf("Rezultat: "); if (l == k) puts(temp); else puts(temp1); return 0; >

Регистрация: 25.08.2011
Сообщений: 2,841

А чего прям ступор то.

Во первых вот так

str4 = "";

делать низя. Это же указатель на память.
Лучше вот так:

str4 = NULL;

Перед использованием переменные лучше чистить.

memset(str1, 0, 160); memset(temp, 0, 160); memset(str2, 0, 160); memset(temp1, 0, 160);
 while (str3) < int t = (strcmp(str3, str2)); if (t == 0) < nom++; l = nom; if (nom == k) < str3 = NULL; > strcat(temp, str3);

Вот так чего то там удаляет:

#define _CRT_SECURE_NO_DEPRECATE #include #include #include #include int main(int argc, char *argv[]) < char str1[160], temp[160], str2[160], temp1[160]; memset(str1, 0, 160); memset(temp, 0, 160); memset(str2, 0, 160); memset(temp1, 0, 160); printf("Vvedite predlojenie: "); gets_s(str1); printf("Vvedite slovo: "); gets_s(str2); char *str3 = strtok(str1, " "); int k = 0, l = 0; printf("Vvedite # vhojdenia: "); scanf("%d", &k); int nom = 0; while (str3) < int t = (strcmp(str3, str2)); if (t == 0) < nom++; l = nom; if (nom == k) < str3[0]=0; >> strcat(temp, str3); strcat(temp, " "); str3 = strtok(NULL, " "); > if (nom != k) < char *str4 = strtok(temp, " "); while (str4) < int t = (strcmp(str4, str2)); if (t == 0) < l = 0; l++; if (l == nom) < str4[0] = 0; >> strcat(temp1, str4); strcat(temp1, " "); str4 = strtok(NULL, " "); > > printf("Rezultat: "); if (l == k) puts(temp); else puts(temp1); getchar(); return 0; >

Skype — wmaster_s E-Mail — WorldMasters@gmail.com
Работаем по 3 критериям — быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 02.06.2020 в 09:41 .

WorldMaster
Посмотреть профиль
Найти ещё сообщения от WorldMaster

Регистрация: 16.12.2014
Сообщений: 4
Сообщение от WorldMaster
Вот так чего то там удаляет:
вот теперь работает, спасибо за помощь

memset(str1, 0, 160); memset(temp, 0, 160); memset(str2, 0, 160); memset(temp1, 0, 160);

и вопросик один, а почему лучше их чистить?
Регистрация: 25.08.2011
Сообщений: 2,841
Сообщение от justmuve
вот теперь работает, спасибо за помощь

memset(str1, 0, 160); memset(temp, 0, 160); memset(str2, 0, 160); memset(temp1, 0, 160);

и вопросик один, а почему лучше их чистить?

На эту темы есть старый анекдот:

Буратино в магазине купил 5 яблок.
Затем пошел в другой магазин и купил еще 3 яблока.
Сколько яблок теперь у буратино??

Ответ: Сколько угодно, потому что никто не знает сколько до этого у него было яблок.

В С вам просто выделен кусок памяти. Что в нем может лежать никому никогда не будет известно. И чтобы не получать неожиданных результатов работы для каждой переменной нужна своя инициализация. Правило хорошего тона.

Skype — wmaster_s E-Mail — WorldMasters@gmail.com
Работаем по 3 критериям — быстро, качественно, недорого. Заказчик выбирает любые два.

WorldMaster
Посмотреть профиль
Найти ещё сообщения от WorldMaster

Удаление слов из строки

Добрый день)) Уже второй день пытаюсь написать эту программку, но у меня ничего не получается((( Помогите пожалуйста. Есть условие, которое находит самое длинное слово в предложение. Теперь необходимо удалить слова, которые состоят из латинских букв. (нельзя использовать string и тому подобные)

int main(int argc, char** argv) < setlocale(LC_ALL, "Russian"); char str[80]; cout else < if (count >maxLen) < maxLen = count; index = i - count; >count = 0; > > if (count > maxLen) < maxLen = count; index = i - count; >maxLen += index; printf("\n"); for (i = index; i < maxLen; i++)< //putchar(str[i]); cout printf("\n"); bracket(str); 

Вот я что-то пыталась (n-раз) написать, но оно как всегда не работает)

int temp =0; for(int i=0; i < lenght; i++)< if (((str[i]>='a')&&(str[i]<='z'))||((str[i]>='A')&&(str[i] <='Z')))< temp++; >else str[i-temp] = str[i]; lenght-=temp; > cout

Отслеживать
9,056 14 14 серебряных знаков 26 26 бронзовых знаков
задан 1 дек 2016 в 13:36
Даша Новикова Даша Новикова
633 1 1 золотой знак 8 8 серебряных знаков 20 20 бронзовых знаков
а регулярки можно использовать.
1 дек 2016 в 13:51

"нельзя использовать string и тому подобные" -- чему подобные? Поконкретней можно, что именно нельзя использовать?

1 дек 2016 в 13:53
@Alex.B да можно
1 дек 2016 в 14:08
@PinkTux Ну желательно сделать максимально просто, без использования готовых функций
1 дек 2016 в 14:10
Допускаю фразу нельзя использовать без обоснования причин только в вопросах с меткой соревнование.
1 дек 2016 в 14:19

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Я не знаю, что такое "функция string", поэтому вот обе части задания отдельно, с минимальным использованием библиотечных функций. Код немного избыточен для наглядности. При удалении слов (вторая часть) пробелы и знаки препинания остаются на своих местах. Обработка цифр не предусмотрена.

#include #include #include #include int main( void ) < char str[] = "someяяя string with longюю, longest, short and shortest words"; char *s = str; char *longest_ptr = s; size_t longest_len = 0; char *word_ptr; size_t word_len; while( *s ) < /* пропускаем пробелы и знаки препинания */ while( *s && ( isspace( *s ) || ispunct( *s ) ) ) < s++; >/* ищем самое длинное слово */ word_len = 0; word_ptr = s; while( *s && !isspace( *s ) && !ispunct( *s ) ) < s++; word_len++; >if( word_len > longest_len ) < longest_len = word_len; longest_ptr = word_ptr; >> /* выводим самое длинное слово */ printf( "longest word (%zu chars): ", longest_len ); while( longest_len-- ) < putchar( *longest_ptr++ ); >putchar( '\n' ); /* теперь ищем слова с латиницей */ s = str; while( *s ) < while( *s && ( isspace( *s ) || ispunct( *s ) ) ) < s++; >longest_len = 0; /* длина текущего слова */ word_len = 0; /* количество латинских букв в нём */ word_ptr = s; while( *s && !isspace( *s ) && !ispunct( *s ) ) < if( ( *s >= 'a' && *s = 'A' && *s longest_len++; s++; > /* слово только из латиницы, двигаем оставшуюся строку на его место */ if( word_len == longest_len ) < /* * было бы логичней: * memmove( word_ptr, s, strlen( s ) + 1 ); * но раз задание для мазохистов. */ word_len = 0; while( *s ) < word_ptr[word_len++] = *s++; >word_ptr[word_len] = 0; s = word_ptr; > > printf( "string without latin-only words: '%s'\n", str ); return 0; > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *