Форум программистов, компьютерный форум CyberForum.ru

Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 19:09     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #1
Пожалуйста прошу вашей помощи необходимо сделать проверку чтобы не было цифр в массиве и повторение букв, написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int count1=0;
for (int i=0;s1[i]!='\0';i++)
    {
     for (int j=0;s1[j]!='\0';j++)
     {
         if(i!=j)
         {
             if(s1[i]==s1[j]||(!isdigit(s1[i])))
             {
                 count1++;
             }
         }
     }
   }
   if(count1!=0)
   {
       cout<<"...."<<endl<<endl;
   }
Только проблема с этим кусочком кода (!isdigit(s1[i])) может он вообще не правильный?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2011, 19:09     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве
Посмотрите здесь:

C++ как посчитать количество повторений каждой из цифр в числе N*N
Определить количество повторений каждой из цифр в числе C++
C++ прога определения кол-ва повторений букв и их сочетаний
C++ Последовательность из цифр, букв и знаков. Подсчитать чего больше и составить строки только из цифр, букв и знаков
C++ Найти количество повторений цифр в числе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
01.08.2011, 20:08     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #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
#include <stdio.h>
#include <ctype.h>
 
int search(const char* str) {
   const char* s1 = str;
   const char* s2;
   while( *s1 ) {
       if( isdigit( *s1 ))
           return 0;
       for(s2 = str; *s2; *s2++)
           if( *s1 == *s2 && s1 != s2)
               return 0;
       *s1++;
   }
   return 1;
}
 
 
int main(void) {
 
   char arr[] = { "ADSL" };
 
   if(search(arr))
      puts("yes succeeded !");
   else
      puts("not !");
 
   (search("ASP2.NET")) ?  puts("yes test !") : puts("no test !");
 
   getchar();
   return 0;
}
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
01.08.2011, 20:17     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #3
в чем именно проблема?
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 20:28  [ТС]     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #4
Цитата Сообщение от silentnuke Посмотреть сообщение
в чем именно проблема?
С этой строчкой она не правильная
C++
1
!isdigit(s1[i]
Добавлено через 3 минуты
xAtom, спасибо огромное но это не совсем то мне нужно в моём коде решит проблему, почему строка isdigit делает проблему.
проверка не выполнятся на экран выводиться точки даже если нет цифр.

Добавлено через 2 минуты
C++
1
2
3
4
5
 if(s1[i]==s1[j]||(!isdigit(s1[i])))
             {
                 count1++;
                 cout<<count1;
             }
для проверки вывожу на экран пишет 0,1,2,3....20 мой массив из 5 элементов.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
01.08.2011, 20:47     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #5
во первых, не if(!isdigit(s1[i])), а if(isdigit(s1[i])).
ибо isdigit возвращает не нулевое значение, если это число.
а по вашей логики выходило наоборот все буквы-это числа, а числа-буквы, и каждый раз когда встречали букву, вы увеличивали счетчик.

во вторых, если делать как у вас) то у вас если попадется число то оно увеличит счетчик на размера массива, и так каждый раз когда будет число.
поэтому стоит переписать вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int i=0;s1[i]!='\0';i++)
    {
        if(isdigit(s1[i]))
            count1++;
        for (int j=0;s1[j]!='\0';j++)
        {
            if(i!=j)
            {
                if(s1[i]==s1[j])
                {
                    count1++;
                    cout<<count1;
                }
            }
        }
    }
Diesel101
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 31
01.08.2011, 20:56  [ТС]     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #6
Просто нет слов просто скажу что очень вам благодарен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2011, 00:36     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве
Еще ссылки по теме:

Необходимо переписать в третий массив общие элементы первых двух массивов без повторений C++
Отсутствие элемента в массиве C++
C++ Введите с клавиатуры некоторый текст и подсчитать в нем количество слов, букв, цифр,строчных букв, заглавных б

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
02.08.2011, 00:36     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве #7
У вас в этом фрагменте кода

C++
1
2
for(s2 = str; *s2; *s2++)
           if( *s1 == *s2 && s1 != s2)
есть опечатка, так как должно быть не *s2++, а просто s2++. Но кроме того совсем не нужно сравнивать каждый элемент со всеми элементами строки. Достаточно начальное значение цикла положить роавным s2 = s1 + 1

C++
1
2
for(s2 = s1 + 1; *s2; *s2++)
           if( *s1 == *s2 && s1 != s2)
Yandex
Объявления
02.08.2011, 00:36     Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве
Ответ Создать тему
Опции темы

Текущее время: 06:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru