Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 8
1

Удалить в символьной строке все слова, по длине большие, чем N

12.10.2010, 18:21. Показов 1093. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задание: удалить в символьной строке все слова, по длине большие, чем N(N вводится пользователем)

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
#include <stdio.h>
 
#define bool int
#define YES 1
#define NO 0
 
#define MAX_LEN 1024
 
void readString(char *str) {
        char tmp;
        int i = 0;
        
        while ( ( tmp = getchar() )!= '\n' )
        {
                str[i] = (char)tmp;
                i++;
        }
        str[i] = '\0';
}
 
void removeWords(char *string, int len) {
        char *ptr = string;
        bool inWord = NO;
        bool stop = NO;
        int curLength = 0;
        
        while (!stop) {
                switch (*ptr) {
                        case '\n':
                                
                        case ' ':
                                
                        case '\t':
                                
                        case '\0':
                                if(inWord == YES) {
                                        if (curLength > len) {
                                                char *wrd = ptr - curLength;
                                                char *tmp = ptr;
                                                
                                                while (*tmp!='\0') {
                                                        if (*tmp != '\n' && *tmp != ' ' && *tmp != '\t') {
                                                                break;
                                                        }
                                                        tmp++;
                                                }
                                                
                                                while (*tmp != '\0') {
                                                        *wrd++ = *tmp++;
                                                }
                                                *wrd = '\0';
                                                ptr -= curLength + 1;
                                        }
                                }
                                curLength = 0;
                                inWord = NO;
                                
                                if (*ptr == '\0') {
                                        stop = YES;
                                }
                                break;
                                
                        default:
                                curLength++;
                                inWord = YES;
                                break;
                }       
                ptr++;
        }
}
 
int main (int argc, const char * argv[]) {
    char string[MAX_LEN+1];
        int length;
        
        printf("Enter string:\n");
        readString(string);
        
        printf("Enter length of words to remove:\n");
        scanf("%d", &length);
        if(length > 0) {
                removeWords(string, length);
                
                printf("Modified string:\n%s",string);
        }
        else {
                printf("Bad length");
        }
 
        
    return 0;
}

отладка в дебаге показала, что ошибка в строчке "ptr -= curLength + 1;" (от указателя отнимается текущая длинна плюс один), и что при таком условии программа не будет удалять первое слово. в чём ошибка пока не понять. помогите разобраться
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2010, 18:21
Ответы с готовыми решениями:

В символьной строке удалить все слова, состоящие более чем из N букв
Привет. Нужна помощь. Условие-В символьной строке удалить все слова, состоящие более чем из N...

Написать функцию, которая определяет, все ли слова в заданной символьной строке длине 3 букв
#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; void str (char mas) //написать и...

В символьной строке удалить все слова с четным номером
Помогите написать программу или примерный план написания.

В символьной строке удалить все слова, начинающиеся с гласной буквы
Добрый день,есть задание:В символьной строке удалить все слова, начинающиеся с гласной...

5
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.10.2010, 18:54 2
Каковы входные данные ?
0
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 8
12.10.2010, 19:34  [ТС] 3
входные строка и N - длинна
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
12.10.2010, 19:49 4
taorange, приведите входные данные, на к-рых программа валиться.
0
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 8
12.10.2010, 21:27  [ТС] 5
когда "ptr -= curLength + 1, то удаляется всё, кроме первого слова, в любой строке
когда
"ptr -= curLength, то работает всё правильно при любых строках и N, кроме N=1. тогда программа выдаёт 2 буквы, непонятно для меня откуда взявшихся, хотя должна удалять всё, кроме слов с длинной 1 символ
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.10.2010, 11:23 6
C
1
ptr -= curLength;
зря вообще такую штуку сделал

C
1
2
3
4
5
    while (*tmp != '\0') {
        *wrd++ = *tmp++;
     }
     *wrd = '\0';
     ptr -= curLength + 1;
вот так попробуй
C
1
2
3
4
    ptr = wrd;
 
    while ((*wrd++ = *tmp++))
         ;
0
13.10.2010, 11:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2010, 11:23
Помогаю со студенческими работами здесь

В символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву
Люди помогите написать программу на языке C(Cu), в символьной строке удалить все слова,...

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

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

В символьной строке удалить все слова, содержащие две подряд идущие гласные буквы
Здравствуйте, помогите пожалуйста напрсать программу, сам вообще ноль :( Условие: В символьной...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru