2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 21
1

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

13.01.2010, 11:17. Показов 5109. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте помогите найти ошибку пожалуйста. Задача такова: в символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву.
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
#include<stdio.h>
#include<windows.h>
 
testword(char string[])
{
    int i;
    int i1=0;
    int j=0;
    int in;
    int out;
    char d[100];
    
    for(i=0;string[i]!='\0';i++)
    {
        if(string[i-1]==' '||i==0)
        {
            in=i;
            printf("%d,%c\n",i,string[in]);
        }
        if(string[i+1]==' '||string[i+1]=='\0')
        {
            out=i;
            printf("%d,%c\n",i,string[out]);
 
            if(string[in]!=string[out])
            {
                for(j=in;j<out;j++)
                {
                    d[i1]=string[j];
                }
                d[i1]=' ';
                i1++;
            }
        }
        printf("%s\n",d);
    }
    return 0;
}
 
void main()
{
    char s[100];
    gets(s);
    printf("%s\n",s);
    testword(s);
}
мне это задание нужно сделать с указателями, но для начала решил сделать с массивами, чтобы разобраться, как это работает, а потом от этой задачи перебраться к указателям, т.к. счас не совсем понимаю, как с ними работать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2010, 11:17
Ответы с готовыми решениями:

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

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

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

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

10
3508 / 2670 / 329
Регистрация: 11.03.2009
Сообщений: 6,109
13.01.2010, 12:01 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
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <string.h>
#include <alloc.h>
 
void Testword(char *string)
{
   char *buf, *tmpstr, *strout;
 
   tmpstr = (char*)malloc(strlen(string));
   strout = (char*)malloc(strlen(string));
   strcpy(tmpstr, string);
 
   strcpy(strout, "\0");
   buf = strtok(tmpstr, " .,\n");
   while (buf)
   {
      if (buf[0] == buf[strlen(buf)-1])
      {
         buf = strtok(NULL, " .,\n");
         continue;
      }
      strcat(strout, buf);
      strcat(strout, " ");
      buf = strtok(NULL, " .,\n");
   }
   printf("%s\n", strout);
   free(tmpstr);
   free(strout);
}
 
int main(int argc, char* argv[])
{
   char str[100];
 
   fgets(str, 99, stdin);
   Testword(str);
   getch();
   return 0;
}
0
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 21
13.01.2010, 12:14  [ТС] 3
kazak
спасибо огромное, но если не сложно можеш мою программу подправить, где в ней ошибка?
просто для меня сложно пока в такой программе разобраться, хотело бы с более простого, что для меня понятно
0
3508 / 2670 / 329
Регистрация: 11.03.2009
Сообщений: 6,109
13.01.2010, 12:52 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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

Добавлено через 18 минут
Хотя вроде разобрал
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
int testword(char string[])
{
   int i;
   int i1=0;
   int j=0;
   int in;
   int out;
   char d[100]={'\0'};
 
   for(i=0;string[i]!='\0';i++)
   {
      if(i==0 || string[i-1]==' ')
      {
         in=i;
      }
      if(string[i+1]==' '|| string[i+1]=='\0')
      {
         out=i+1;
         if(string[in]!=string[out-1])
         {
            for(j=in;j<out;j++)
            {
              d[i1]=string[j];
              i1++;
            }
            d[i1]=' ';
            i1++;
         }
      }
   }
   printf("%s\n",d);
 
   return 0;
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12242 / 7409 / 1737
Регистрация: 25.07.2009
Сообщений: 13,602
13.01.2010, 12:59 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Bl@st, сложно, наверное, будет, но попробуйте разобраться:
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>
#include <string.h>
#include <stdlib.h>
    
/* в символьной строке удалить все слова, начинающиеся и заканчивающиеся на одну и ту же букву. */
    
#define SEPCHAR " \t\n" /* символы - разделители */   
#define STRLEN 128
int main(void){
    char buf[STRLEN], *p;
    
    while ( 1 ){
        printf("String: ");
        if ( !fgets(buf, sizeof(buf), stdin) ) /* прочитать строку, если неудачно - выход с ошибкой */
            exit(1);
        if ( *buf == '\n' ) /* если строка пустая - на выход */
            exit(0);
        /* а вот тут сначала надо бы описание библиотечной функции strtok прочитать */
        for ( p = strtok(buf, SEPCHAR); p != NULL; p = strtok(NULL, SEPCHAR) )
            if ( *p != *(p + strlen(p) - 1) ) 
                printf("%s ", p);
        printf("\n");
    }
    exit(0);
}
1
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 21
13.01.2010, 13:19  [ТС] 6
kazak
хорошо, я хотел реализовать следующее:
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
[CODE]
#include<stdio.h>
#include<windows.h>
 
int testword(char string[100])
{
    int i;
    int i1=0;
    int j;
    int in;//адрес первой буквы
    int out;//адрес второй буквы
    char d[100];//массив для готового результата
    bool flag1=false;
    
    for(i=0;string[i]!='\0';i++)//если не конец строки, то продолжить
    {
        if(string[i-1]==' '||i==0)//нахожу первую букву в слове
        {
            in=i;//и записываю ее адрес
            printf("%d,%c\n",i,string[in]);
        }
        if(string[i+1]==' '||string[i+1]=='\0')//нахожу вторую букву в слове
        {
            out=i;//записываю ее адрес
            printf("%d,%c\n",i,string[out]);
 
            if(string[in]!=string[out])//сравниваю буквы
            {
                flag1=true;//если не совпадают
            }
        }
        if(flag1=true)//если буквы не совпали
        {
            for(j=in;j<out;j++)//цикл с первой буквы до последней
                {
                    d[i1]=string[j];//переписываю буквы в выходной массив
                }
                d[i1]=' ';//пробел между словами
                i1++ ;
        }
        printf("%s\n",d);//вывод готового результата
    }
    return 0;
}
 
void main()
{   
    char s[100];//массив под строку
    gets(s);//ввожу строку символов
    printf("%s\n",s);//исходная строка
    testword(s);//переношу эту строку в функцию, которая будет производить ее обработку
}
[/CODE]
Добавлено через 13 минут
easybudda
спасибо большое, просто хочется, что то и свое до ума довести или реализация совсем не логичная?((
про функции почитаю, хотел без них обойтись пока для понимания
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12242 / 7409 / 1737
Регистрация: 25.07.2009
Сообщений: 13,602
13.01.2010, 17:02 7
Цитата Сообщение от Bl@st Посмотреть сообщение
про функции почитаю, хотел без них обойтись пока для понимания
Я вот всё-таки прихожу к выводу, что стандартных функций С хватает если и не на все случаи жизни, то очень на многие... Главное - знать их и уметь ими пользоваться. Сам, помню, по незнанию такие самоделки лепил - сейчас смотришь, аж смешно порой... Что же до логики этого примера, то куда проще:
1. прочитать строку
2. выдёргивать из неё по слову
3. сравнивать первую и последнюю букву
4. если не равны, напечатать слово
Не считая накладок с запросом и проверками, собственно 4 строчки и получилось.
0
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 21
13.01.2010, 20:18  [ТС] 8
easybudda
а где про них можно почитать? в хелпе?
в принципе у меня как раз ведь эта логика? =^_^=
а на сколько активно счас используется язык Си? в жизни
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12242 / 7409 / 1737
Регистрация: 25.07.2009
Сообщений: 13,602
13.01.2010, 20:41 9
Цитата Сообщение от Bl@st Посмотреть сообщение
а на сколько активно счас используется язык Си? в жизни
Да трудно сказать. Выбор языка программирования в первую очередь должен определяться требованиями к программе (прочитал где-то)... В относительно свежей FreeBSD по тупому запросу
Код
find /usr/src -name *.c
11 с половиной тысяч файлов нашлось. Видимо, всё-таки используется

Цитата Сообщение от Bl@st Посмотреть сообщение
в принципе у меня как раз ведь эта логика?
ну мне как-то мой вариант больше нравится

Цитата Сообщение от Bl@st Посмотреть сообщение
а где про них можно почитать? в хелпе?
polnyy_spravochnik_po_c_gerbert_shildt.zip вот к примеру...
1
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 21
13.01.2010, 22:20  [ТС] 10
easybudda спасибо большое! буду разбираться дальше как только задачи доделаю

Добавлено через 51 минуту
kazak
спасибо, т.е. он мне мусор выдавал из-за этой строчки:
Код
char d[100]={'\0'};
?
0
3508 / 2670 / 329
Регистрация: 11.03.2009
Сообщений: 6,109
13.01.2010, 22:56 11
Нет, у тебя было out = i; вместо out = i+1; и после d[i1]=string[j]; i1++; был пропущен.
0
13.01.2010, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2010, 22:56
Помогаю со студенческими работами здесь

Из текста удалить все слова начинающиеся и заканчивающиеся на одну букву
Из текста удалить все слова начинающиеся и заканчивающиеся на одну букву.

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

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

Удалить из файла все фразы, заканчивающиеся и начинающиеся на одну и ту же букву
Дан файл, содержащий некоторый текст. Удалить из файла все фразы, заканчивающиеся и начинающиеся на...

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

Найти и вывести все слова начинающиеся и заканчивающиеся на одну и ту же букву (комментирование кода)
Прокомментируйте пожалуйста код: /* Ввести строку длинной до 500 символов.Алфавит русские буквы и...


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

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

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