Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
sSTUDENTUSs
-10 / 1 / 2
Регистрация: 05.10.2014
Сообщений: 26
1

Ввести строку и слово, удалить все вхождения слова и вывести строку

08.10.2014, 22:39. Просмотров 1279. Ответов 2
Метки нет (Все метки)

Написал код. Вот условие: "Ввести строку и слово, удалить все вхождения слова и вывести строку."

Насчет логической правильности не уверен, к тому же после компиляции компилятор выдает ошибку
"Необработанное исключение в "0x00401457" в "Untitled3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x006915cc"." это если в vs 2008. CodeBlocks зависает на вводе строки.

Синтаксис правильный, я думаю это бесконечный цикл...
Почему?..

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
#include <stdio.h>
 
 
#define MAXLINE 1000
#define MAXWORD 100
void copy(char to[], char from[]);
 
int main()
 
 
{
    int c, u, i=0, n, flag, beg, end, j, begin, m, k;
    char str[MAXLINE];
    char slv[MAXWORD];
    char nov[MAXLINE];
 
    printf("Enter word:\n");
        for (i=0; i<MAXWORD; i++)
    {
    c=getchar(); slv[i]=u;
         if (c=='\n')
            k = i-1;
             {break;}
 
    }
 
 
    printf("Enter text:\n");
    for (i=0; i<MAXLINE; i++)
        {
         c=getchar(); str[i]=c;
         if (c=='\n')
             {break;}
        }
 
    j=0;
 
    begin=0;
 
    for (i=0; i<MAXLINE-1 ; ++i )
    {
        if (str[i] == slv[j] && flag == 0 ) {   flag=1; // флаг о начале слова в строке
                                                beg=i;   // начало слова
                                                
                                                j++;     // счетчик букв слова
 
                                            }
        if (str[i] == slv[i] && flag ==1)
                                            {
                                            j++;
                                            if (j=k){end = i ;
                                                    flag= 0;
                                                    for (i=begin; i= beg; i++)  {
                                                                                nov[i] = str[i] ;
                                                                                }
                                                    end= begin ;
                                          
                                                    j=0;
                                                    }
                                            
                                            }
 
 
        if (str[i] != slv[i])   {flag = 0;
                                m=0;
                                j=0;
 
                                }
    }
 
}
Добавлено через 12 часов 44 минуты
подскажите что нибудь хотя бы пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2014, 22:39
Ответы с готовыми решениями:

Ввести строку и слово, удалить все вхождения слова и вывести строку
Доброго времени суток всем ! написал лр2 (Ввести строку и слово, удалить все...

Ввести строку и слово, удалить все вхождения слова и вывести строку
Нужно написать программу только со стандартной библиотекой &lt;stdio.h&gt; Помогите,...

Ввести строку символов. Удалить из строки все символы, не являющиеся цифрами. Результат вывести на экран.
Задача 1. Ввести строку символов. Удалить из строки все символы, не являющиеся...

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

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

2
easybudda
Модератор
Эксперт CЭксперт С++
10092 / 6002 / 1504
Регистрация: 25.07.2009
Сообщений: 11,384
08.10.2014, 23:05 2
Как-то сложно у Вас там всё... Нашёл у себя в закромах, может пригодится...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
 
/* ANSI C 99 */
/* Убирает все вхождения подстроки w в строке s */
char * remove_word(char * restrict s, const char * restrict w) {
    size_t len = strlen(w);
    for ( char * ptr = strstr(s, w); ptr; ptr = strstr(ptr, w) )
        memmove(ptr, ptr + len, strlen(ptr + len) + 1);
    return s;
}
 
typedef char shortstring_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
int main(void) {
    shortstring_t str, wrd;
    
    while ( printf("String: ") && get_string(str) && printf("Word: ") && get_string(wrd) )
        printf("Result: %s\n", remove_word(str, wrd));
    
    return 0;
}
0
sSTUDENTUSs
-10 / 1 / 2
Регистрация: 05.10.2014
Сообщений: 26
13.10.2014, 09:16  [ТС] 3
другой алгоритм
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
//15. Ввести строку и слово, удалить все вхождения слова и вывести строку.
//
 
#include <stdio.h>
 
 
#define MAXLINE 1000
#define MAXWORD 100
void copy(char to[], char from[]);
 
int main()
 
 
{
    int c, i=0, n, j=0, m, k, t, f ;
    char str[MAXLINE];
    char slv[MAXWORD];
    char nov[MAXLINE];
 
 
    int l=0;
    k=0;
    printf("Enter word:\n");
    for (i=0; i<(MAXWORD-1) && (c=getchar()) != EOF && c != '\n'; i++)
    {
        slv[i]=c;
        if (c=='\n')
            k++;
    }
 
    printf("Enter text:\n");
    for (i=0; i<(MAXLINE-1) && (c=getchar())!= EOF && c != '\n'; i++)
    {
        str[i]=c;
        l++;
    }
    int flag2 = 0;
    int flag1 = 0;
    t=0;
 
    for (i=0; i<l-1; i++)
    {
 
    if ((flag1 = 0) || (str[i] = ' '))
    {
 
    flag1=1;
    while ((str[i] !=' ') && (f != k))
                {
                    if (str[i] != slv[f])
                                        {
                                        flag2 = 1;
                                        }
                    f++;
                    i++;
                }
     if (flag2 = 1)
                        {
                            while (str[i] !=' ')
                                                 {
                                                    nov[t] = slv[i];
                                                    i++;
                                                    t++;
                                                 }
                                                 t += i;
                        }
 
   nov[j+1] = '\0';
    for(i = 0 ; i < j; i++)
    {
        printf("%c",nov[i]);
    }
 
 
 
 
    }
    }
}

не работает, не получается у меня эта программа. написать её нужно без string...

Добавлено через 3 минуты
суть алгоритма. просматриваем все слова начиная с пробела или начала строки. если есть несовпадения, записать слово в новый массив. мой код ничего не выводит.наверное нужно указатели использовать, но я не знаю как.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 09:16

Удалить все вхождения символа в строку
Задача такая. С клавиатуры вводится строка и символ. Нужно удалить все...

Из введенной строки удалить все слова, которые начинаются с большой буквы и вывести полученную строку
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; #include...

Ввести строку и слово. Найти позицию заданного слова в строке
Помогите решить проблему с программой #include &lt;stdio.h&gt; #include &lt;string.h&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru