Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/12: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Katiox-xa
0 / 0 / 0
Регистрация: 28.09.2008
Сообщений: 4
1

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

02.10.2008, 09:46. Просмотров 2134. Ответов 4
Метки нет (Все метки)

Здравствуйте,
Помогите, пожалуйста исправить ошибку в программе, написанную на языке С
В некоторых случаях не работает
Например в строке dshfhjd hjghjg
Выводит hjd


В символьной строке оставить только слова, начинающиеся и заканчивающиеся на одну и ту же букву.(Не использовать встроенных функций обработки строк)


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
#include <stdio.h>
#define MAXLINE 100
 
void main (void)
{
  int f;
  int i, j, k, p, i2, t;
  char c;
  char str1[MAXLINE];
  char str2[MAXLINE]="";
  i2=0;
  i=0;
  while ( (c=getchar())!=EOF && c!='\n')
  {
     str1[i]=c;
     ++i;
  }
  if (c=='\n')
  {
   str1[i]=c;
   ++i;
  }
  str1[i]='\0';
 
  i=p=f=t=0;
  while (str1[i]!='\0')
  {
      if ((str1[i]==' ') || (str1[i]=='.') || (str1[i]=='\n') || (str1[i]==', '))
       {
            i2=i-1;
             if (str1[p]==str1[i2])
                 f=f+1;
             p=i+1;
      }
    if (f!=0)
    {
       for (f=t; f<=(t+i-i2+1); f+=1)
            str2[f]=str1[i2+f-t-2];
          t=f;
       f=0;
       }
    i++;
  }
printf ("%s\n", str2);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2008, 09:46
Ответы с готовыми решениями:

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

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

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

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

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

4
Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
02.10.2008, 12:34 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
24
25
26
27
28
29
30
 
#include <stdio.h>
#define MAXLINE 100
void main (void) {
  int i, j, k;
  char c;
  char str1[MAXLINE];
  char str2[MAXLINE]="";
  i=0;
  while ( (c=getchar())!=EOF && c!='\n'){
     str1[i]=c; ++i;
  }
  if (c=='\n'){
   str1[i]=c; ++i;
  }
  str1[i]='\0';
  i=j=k=0;
  while (str1[ i ] != '\0'){
   str2[ k ] = str1[ i ];
   if ( (str2[ k ]==' ') || (str2[ k ]=='.') || (str2[ k ]=='\n') || (str2[ k ]==',') ){
     if ( str2[ k - 1 ] != str2[ j ] ) {
      str2[ j ] = '\0'; k = j;i++;
      continue;
     } else j = k + 1;
   }
   k++;i++;
  }
printf("%s\n",str2);
getchar();
}
0
Katiox-xa
0 / 0 / 0
Регистрация: 28.09.2008
Сообщений: 4
02.10.2008, 19:58 3
Эта программа тоже не всегда правильно работает
Например:
строка: hgjhghjgjhghjg jhgjhg hgjgjhh
выводит: hgjgjhh
jhghjg


строка: jghjgjhgjhgjghg gffghg ghg
выводит: gffghg ghg
jghg
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
02.10.2008, 22:15 4
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
#include <stdio.h>
#define MAXLINE 100
void main (void) 
{
    int i, fir, last;
    char c;
    char str1[MAXLINE];
    i=0;
    while ( (c=getchar())!=EOF && c!='\0')
    {
        str1[i]=c; ++i;
    }
 
    i=fir=last=0;
    bool next = false;
    while (str1[i] != '\0')
    {
        if ( (str1[i]==' ') || (str1[i]=='.') || (str1[i]=='\n') || (str1[i]==',') || (str1[i]=='\0') )
        {
            last = i-1;
            if( str1[fir] == str1[last] )
            {
                for(int j = fir; j <=i ; j++)
                    printf("%c",str1[j]);
            }
            next = true;
        }
        else
        {
            if(next)
            {
                fir = i;
                next = false;
            }
        }
 
        ++i;
    }
    printf("\n");
}
когда ввели текст жмем Ctrl + Z и Ентер.
0
Angry_Bobo
269 / 31 / 6
Регистрация: 27.08.2008
Сообщений: 156
03.10.2008, 10:00 5
А так работает?

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
 
#include <stdio.h>
#define MAXLINE 100
void main (void) {
 int i=0, j, k;
 char c, str1[MAXLINE], str2[MAXLINE]="";
 while ( (c=getchar())!=EOF && c!='\n'){
    str1[i]=c; ++i;
 }
 if (c=='\n'){
  str1[i]=c; ++i;
 }
 str1[i]='\0'; i=j=k=0;
 while (str1[ i ] != '\0'){
  str2[ k ] = str1[ i ];
  if ( (str2[ k ]==' ') || (str2[ k ]=='.') || (str2[ k ]=='\n') || (str2[ k ]==',') ){
    if ( str2[ k - 1 ] != str2[ j ] ) {
     str2[ j ] = '\0'; k = j; i++; continue;
    } else j = k + 1;
  }
  k++;i++;
 }
 str2[ k - 1 ]= '\0'; printf("%s\n",str2);
 getchar();
}
0
03.10.2008, 10:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2008, 10:00

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

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

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


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

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

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