27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
1

Помогите пожалуйста со строками в C

27.09.2009, 22:48. Показов 1702. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо решить задачку: Дана строка, содержащая последовательность слов, разделенных пробелами. Удалить из строки все слова, в которых есть заданная буква. Конечно же, это не сложное задание и были похожие примеры, но из-за того, что я новичок в программировании, не могу понять, как реализовать эту задачу. Помогите, кто может.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2009, 22:48
Ответы с готовыми решениями:

Недопонял... Помогите пожалуйста... Со строками...
Доброго всем времени суток. Что объявляет следующая строка? char *s; Создаётся указатель на...

Помогите пожалуйста!работа со строками, файлами
Разработайте программу, функция main() которой содержит вызов предложенной стандартной функции...

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

"работа со строками"помогите пожалуйста
в строке заменить все двоеточие(:) точкой с запятой(;).подсчатать колличество замен.

10
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
27.09.2009, 23:14 2
Для выделения "слов" из строки используй функцию strtok().
Для определения, содержит ли слово заданную букву, используй функцию strchr().
1
49 / 49 / 4
Регистрация: 21.05.2009
Сообщений: 156
27.09.2009, 23:26 3
Надо слова, в которых нет заданой буквы писать в конец новой строки... или смещать символи на -длины слова...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12238 / 7405 / 1736
Регистрация: 25.07.2009
Сообщений: 13,586
28.09.2009, 13:53 4
Цитата Сообщение от Vivo Посмотреть сообщение
Дана строка, содержащая последовательность слов, разделенных пробелами. Удалить из строки все слова, в которых есть заданная буква.
Всё хорошо, но есть нюансы: во-первых в конце выводимой строки лишний пробел добавляется, а во-вторых на устойчивость к "дурным" данным особо не проверял. А так в принципе работает...
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
#define SHORTSTR 256
 
/* удаление из строки слов, содержащих указанную букву */
 
/* nextWord возвращает указатель на следующее слово в строке, или NULL */
char *nextWord(const char *str){
    char *p;
    for ( p = (char*)str; *p != '\0' && !isspace(*p); p++ )
        ;
    for ( ; *p != '\0' && isspace(*p); p++ )
        ;
    return ( *p == '\0' ) ? NULL : p;
}
 
/* getWord читает одно слово из строки str и помещает в буфер wrd длинною в len - 1 символов */
char *getWord(char *wrd, size_t len, const char *str){
    char *p;
    char *w;
    for ( p = (char*)str, w = wrd; *p != '\0' && !isspace(*p) && --len > 0; p++, w++ )
        *w = *p;
    *w = '\0';
    return wrd;
}
 
int main(){
    char str[SHORTSTR];
    char wrd[SHORTSTR];
    char *strp;
    char ex_char;
 
    while ( 1 ){
        printf("Enter string or 0 for exit\n");
        fgets(str, SHORTSTR, stdin);
        /* если первый символ строки 0 - выход */
        if ( *str == '0' )
            break;
        printf("Enter symbol for excluding words contains it: ");
        /* сделал так во-первых по привычке, а во второх \n из потока удаляется */
        fgets(wrd, SHORTSTR, stdin);
        ex_char = *wrd;
        /* пока есть слова в строке, получить слово, проверить на отсутствие буквы и напечатать */
        for ( strp = str; strp != NULL; strp = nextWord(strp) )
            if ( !strchr(getWord(wrd, SHORTSTR, strp), ex_char) )
                printf("%s ", wrd);
        printf("\n");
    }
    return 0;
}
1
27 / 27 / 6
Регистрация: 27.09.2009
Сообщений: 101
28.09.2009, 15:53  [ТС] 5
Всё работает как и необходимо. Огромное способо за помощь!!!
0
0 / 0 / 0
Регистрация: 04.10.2009
Сообщений: 17
31.10.2009, 00:57 6
А не подскажете, как сделать такое же задание, но чтобы пробелы оставались тоже???
Например:
вводим строку: " hhh 4 ";
вводим символ для поиска: "h"
Получаем с этим алгоритмом: "4";
Необходимо: " 4 "
0
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 13
07.05.2010, 21:29 7
Подскажите пожалуйста,что нужно изменить чтобы удалило с текста слова,которые начинаються с букв, даных в строке запроса?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12238 / 7405 / 1736
Регистрация: 25.07.2009
Сообщений: 13,586
07.05.2010, 21:51 8
Цитата Сообщение от Rishar Посмотреть сообщение
Подскажите пожалуйста,что нужно изменить чтобы удалило с текста слова,которые начинаються с букв, даных в строке запроса?
Это как понять? Дана строка слов "апельсин мандарин лимон грейпфрукт" и набор символов "амг" - от всей строки должен один лимон остаться? Если угадал, то вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
#define MAX_STR 128
#define SPC " \t\n"
    
int main(void){
    char str[MAX_STR], skip[MAX_STR], *p;
    printf("String: ");
    if ( ! fgets(str, MAX_STR, stdin) ){
        perror("fgets");
        exit(1);
    }
    printf("Characters to skip words starting with: ");
    if ( ! fgets(skip, MAX_STR, stdin) ){
        perror("fgets");
        exit(1);
    }
    
    for ( p = strtok(str, SPC); p != NULL; p = strtok(NULL, SPC) )
        if ( ! strchr(skip, *p) )
            printf("%s ", p);
    printf("\n");
    
    exit(0);
}
1
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 13
09.05.2010, 12:20 9
Цитата Сообщение от easybudda Посмотреть сообщение
Это как понять? Дана строка слов "апельсин мандарин лимон грейпфрукт" и набор символов "амг" - от всей строки должен один лимон остаться? Если угадал, то вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
#define MAX_STR 128
#define SPC " \t\n"
    
int main(void){
    char str[MAX_STR], skip[MAX_STR], *p;
    printf("String: ");
    if ( ! fgets(str, MAX_STR, stdin) ){
        perror("fgets");
        exit(1);
    }
    printf("Characters to skip words starting with: ");
    if ( ! fgets(skip, MAX_STR, stdin) ){
        perror("fgets");
        exit(1);
    }
    
    for ( p = strtok(str, SPC); p != NULL; p = strtok(NULL, SPC) )
        if ( ! strchr(skip, *p) )
            printf("%s ", p);
    printf("\n");
    
    exit(0);
}
Спасибо большое,угадали)
0
1 / 1 / 0
Регистрация: 09.05.2010
Сообщений: 59
09.05.2010, 16:34 10
Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами.
Распечатать количество вхождений заданного слова в каждую строку и заменить его на другое заданное слово. Распечатать полученные строки.
помогите пожалуйста
0
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 14
14.12.2010, 17:20 11
Всем здравствуйте. У меня такое же задание удалить все слова в строке с пробелами где содержится данная буква но мне нада сделать под борланд с 3.1 пытался переделать ничего не получилось помогите плз
0
14.12.2010, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2010, 17:20
Помогаю со студенческими работами здесь

помогите со строками
вводится строка из 3х слов ФИО, вывести инициалы. (пример: И. И. Иванов) Программу с 3мя строками...

помогите со строками на С
Даны строки A и B. Если строки состоят из одних и тех же символов и в A нет повторяющихся символов,...

Помогите разобраться со строками
Доброго времени суток всем. Проблема такова, что я только новичок в программировании в 1С, и...

Работа со строками, помогите
Есть база, предположим есть строки число 1, число2,число3 число 4, число5,число6 т.е n строк и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru