C/Работа со строками
Для строки из одного слова проверить, есть ли повторяющиеся символы, можно следующим образом.
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;
}
Если строка содержит несколько слов, надо разделить на отдельные слова. Для каждого слова применить приведённую выше функцию.
Перед определением функции добавим
#define true 1
typedef int bool;
#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;
}
for (j=0;j<=strlen(slova);j++)
{ for(k=j+1;k<=strlen(slova);k++)
...
При прочтении сего, услышал громкий возглас одобрения со стороны ближайшего военкомата.
А прочитав это, почувствовал экстаз специалистов из местного Дома Скорби.
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 не нужно, разве что препод решил поиздеваться и ожидает что вы по всему алфавиту бегать будете, для каждого слова ...
в C нету bool???0_о спасибо, что предупредил, а то я как то и не знал! мы вообще в одной галактике живем?0_о травой поделишься?
[зануда]
В C нету булевого типа, он эмулируется целыми числами: 0 - эквивалент false, любые другие значения - true.
[/зануда]
В C нету булевого типа, он эмулируется целыми числами: 0 - эквивалент false, любые другие значения - true.
[/зануда]
оу, ну если рассматривать так, то в с нет и типа char, бо это тоже эмуляция циферкой под названием _int8. а если заглянуть еще ниже, до великого и могучего asm, то как бе все циферки! надо все-таки придерживаться определенного уровня абстракции. если копать в глубь, то окажется, что вообще ни каких типов не существует. :rolleyes:
ЗЫ: не зануда, а любитель и ценитель С. :D :D :D
Я не рассматриваю так я говорю как есть: примитивного типа bool в C нет - для появления такого слова в коде программы нужно докручивать костыли в виде define-ов. Напротив, примитивный тип char есть - это знаковое восьмибитное целое, которое в частности используется для представления символов в однобайтовых кодировках.
В одной, в одной галактике. В классическом Си нет типа bool.
В версии C99 действительно был введён явный булевый тип. При этом для его использования требуется включение заголовочного файла stdbool.h, внутри которого дефайны.
Но в наших учебных учреждениях до сих пор преподают в основном именно Си Кернигана и Ричи. Поэтому я счёл уместным дать то своё замечание.
Насчёт травы: курю только мануалы :).
ЗЫ: тоже любитель и ценитель C. :D
В версии C99 действительно был введён явный булевый тип. При этом для его использования требуется включение заголовочного файла stdbool.h, внутри которого дефайны.
Но в наших учебных учреждениях до сих пор преподают в основном именно Си Кернигана и Ричи. Поэтому я счёл уместным дать то своё замечание.
Насчёт травы: курю только мануалы :).
ЗЫ: тоже любитель и ценитель C. :D
извиняюсь, почитал стандарт, был не прав! :o :confused:
Ну вообще-то по-хорошему ни одной из этих ф-ций не нужно, чтоб реализовать оптимальный по производительности алгоритм O(n).
Использование же этих функций, как предлагалось здесь, - это уже O(n^2).
Так что это не издевательство, а обучение неправильному программированию. :)
Так что это не издевательство, а обучение неправильному программированию. :)
ну ты меня успокоил, прям елей на душу :) в нашем заведении так не извращались :D хотя в каждом своего хватает)
Guy
извиняю, но показать не могу :) у меня своих дел полно, этот код писать сейчас просто неохота.
посмотри по карманам и найди наконец свою совесть!=\ за пять месяцев можно было не то что бы лабу написать, можно было бы уже весь с выучить!