Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C/Работа со строками

16K
24 декабря 2009 года
Guy
33 / / 27.11.2007
Здравствуйте.Помогите пожалуйста.Нужно выделить из предложения слова содержащие повторяющиеся буквы.При этом нужно задействовать функции strchr и strrchr.
41K
24 декабря 2009 года
Alex57
44 / / 22.02.2009
Цитата: Guy
слова содержащие повторяющиеся буквы.При этом нужно задействовать функции strchr и strrchr.



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

Код:
//  Значение функции true, если в строке  s[] есть повторяющиеся символы.
bool RepeatedSymbols( char s[] )
{
    char *p;
    bool rept=false;

    for ( p=s; *p!='\0'; p++)
    {
        if ( p != strrchr(s, *p) )  
        // то есть данное вхождение символа  *p не является последним
        //  *p встречается более одного раза
        {
            rept=true;
            break;
        }
    }
    // если  rept == true, значит есть повторяющиеся символы, например *p
    return rept;
}


Если строка содержит несколько слов, надо разделить на отдельные слова. Для каждого слова применить приведённую выше функцию.
297
24 декабря 2009 года
koodeer
1.2K / / 02.05.2009
Угу. Но в C нет типа bool.
41K
25 декабря 2009 года
Alex57
44 / / 22.02.2009
Цитата: koodeer
Угу. Но в C нет типа bool.



Перед определением функции добавим

 
Код:
#define false 0
#define true 1
typedef int bool;
16K
30 декабря 2009 года
Guy
33 / / 27.11.2007
Вот эта работает на все предложение,но препод не стал принимать.Сказал что нужно функциями реализовать и предложил использовать strchr и strrchr.

Код:
#include <string.h>
#include <stdio.h>
#include <conio.h>

char predl[80];
char slova[20][20];
int  sl=-1,rz=-1;

int main ()
{
    char *r="`!;:,.?- ";
    char *p,*p2,*z,*x;
    int i,j,k;
    char s[80];

    puts ("Laboratornaya rabota N 8");
    puts ("\n Zadanie: vudelit'slova ");
    puts ("coderzhashie povtoryaushiesya bukvi");
    printf ("\n");
    puts ("Vvedite predlozhenie:");
    gets(predl);
    strcpy(s,predl);//kopiya
    p=strtok(s,r);//pereform predl v otd znaki,r-razdelyaet ih
    while (p)
        {
         sl++;
         strcpy (slova[sl],p);//
         p=strtok (NULL,r);
        }
        for(i=0;i<=sl;i++)
      for (j=0;j<=strlen(slova);j++)
        { for(k=j+1;k<=strlen(slova);k++)
        if (slova[k]==slova[j])
        puts(slova);
             }
    //getch ();
    return 0;
}
16K
20 января 2010 года
Guy
33 / / 27.11.2007
и ведь нужно сделать проверку не только на p, а на весь алфавит...
9
20 января 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: Guy

 
Код:
...
      for (j=0;j<=strlen(slova);j++)
        { for(k=j+1;k<=strlen(slova);k++)
...


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

16K
03 февраля 2010 года
Guy
33 / / 27.11.2007
нет это не то...это из моего кода
9
03 февраля 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: Guy
нет это не то...это из моего кода


А прочитав это, почувствовал экстаз специалистов из местного Дома Скорби.

16K
08 февраля 2010 года
Guy
33 / / 27.11.2007
выделить из предложения слова содержащие повторяющиеся буквы.При этом нужно задействовать функции strchr и strrchr:)
242
08 февраля 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: Guy
выделить из предложения слова содержащие повторяющиеся буквы.При этом нужно задействовать функции strchr и strrchr:)



1.strchr: http://msdn.microsoft.com/ru-ru/library/b34ccac3.aspx
2. strrchr: http://msdn.microsoft.com/ru-ru/library/ftw0heb9.aspx

первая функция находит первое вхождение данного символа, вторая находит последнее вхождение данного символа, если символа, который ищем, нету в строке, функции возвращают NULL.

подсказка: если вхождение буквы единственное, то первое вхождение будет и последним.

и перестань тут спамить своим заданием, одного раза вполне достаточно.

кстати, присмотрись к этой функции:
http://forum.codenet.ru/showpost.php?p=308092&postcount=2
тебе же все написали, правда используют только вторую функцию, т.к. использование функции strchr не нужно, разве что препод решил поиздеваться и ожидает что вы по всему алфавиту бегать будете, для каждого слова ...

16K
13 февраля 2010 года
Guy
33 / / 27.11.2007
так и есть!он издевается по ходу...и не принимает...
307
13 февраля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: koodeer
Угу. Но в C нет типа bool.



в C нету bool???0_о спасибо, что предупредил, а то я как то и не знал! мы вообще в одной галактике живем?0_о травой поделишься?

5
13 февраля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
в C нету bool???0_о спасибо, что предупредил, а то я как то и не знал! мы вообще в одной галактике живем?0_о травой поделишься?


[зануда]
В C нету булевого типа, он эмулируется целыми числами: 0 - эквивалент false, любые другие значения - true.
[/зануда]

307
13 февраля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: hardcase
[зануда]
В C нету булевого типа, он эмулируется целыми числами: 0 - эквивалент false, любые другие значения - true.
[/зануда]



оу, ну если рассматривать так, то в с нет и типа char, бо это тоже эмуляция циферкой под названием _int8. а если заглянуть еще ниже, до великого и могучего asm, то как бе все циферки! надо все-таки придерживаться определенного уровня абстракции. если копать в глубь, то окажется, что вообще ни каких типов не существует. :rolleyes:

ЗЫ: не зануда, а любитель и ценитель С. :D :D :D

5
13 февраля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
оу, ну если рассматривать так, то в с нет и типа char, бо это тоже эмуляция циферкой под названием _int8.

Я не рассматриваю так я говорю как есть: примитивного типа bool в C нет - для появления такого слова в коде программы нужно докручивать костыли в виде define-ов. Напротив, примитивный тип char есть - это знаковое восьмибитное целое, которое в частности используется для представления символов в однобайтовых кодировках.

297
14 февраля 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: Artem_3A
в C нету bool???0_о спасибо, что предупредил, а то я как то и не знал! мы вообще в одной галактике живем?0_о травой поделишься?



В одной, в одной галактике. В классическом Си нет типа bool.

В версии C99 действительно был введён явный булевый тип. При этом для его использования требуется включение заголовочного файла stdbool.h, внутри которого дефайны.

Но в наших учебных учреждениях до сих пор преподают в основном именно Си Кернигана и Ричи. Поэтому я счёл уместным дать то своё замечание.

Насчёт травы: курю только мануалы :).

ЗЫ: тоже любитель и ценитель C. :D

307
17 февраля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: koodeer
В одной, в одной галактике. В классическом Си нет типа bool.

В версии C99 действительно был введён явный булевый тип. При этом для его использования требуется включение заголовочного файла stdbool.h, внутри которого дефайны.

Но в наших учебных учреждениях до сих пор преподают в основном именно Си Кернигана и Ричи. Поэтому я счёл уместным дать то своё замечание.

Насчёт травы: курю только мануалы :).

ЗЫ: тоже любитель и ценитель C. :D



извиняюсь, почитал стандарт, был не прав! :o :confused:

3
18 февраля 2010 года
Green
4.8K / / 20.01.2000
Цитата: Оlga
использование функции strchr не нужно, разве что препод решил поиздеваться и ожидает что вы по всему алфавиту бегать будете, для каждого слова ...



Ну вообще-то по-хорошему ни одной из этих ф-ций не нужно, чтоб реализовать оптимальный по производительности алгоритм O(n).
Использование же этих функций, как предлагалось здесь, - это уже O(n^2).

Так что это не издевательство, а обучение неправильному программированию. :)

242
18 февраля 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: Green

Так что это не издевательство, а обучение неправильному программированию. :)


ну ты меня успокоил, прям елей на душу :) в нашем заведении так не извращались :D хотя в каждом своего хватает)

16K
26 апреля 2010 года
Guy
33 / / 27.11.2007
Оlga прошу заранее прощения:)А кто-нибудь может показать как будет выглядеть код в итоге:) :confused:
242
26 апреля 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: Guy
Оlga прошу заранее прощения:)А кто-нибудь может показать как будет выглядеть код в итоге:) :confused:


Guy
извиняю, но показать не могу :) у меня своих дел полно, этот код писать сейчас просто неохота.

16K
29 апреля 2010 года
Guy
33 / / 27.11.2007
5 месяцев висит...:)
307
29 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Guy
5 месяцев висит...:)



посмотри по карманам и найди наконец свою совесть!=\ за пять месяцев можно было не то что бы лабу написать, можно было бы уже весь с выучить!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог