Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
1

Программа для подсчета символов в строке с указателями

14.04.2013, 17:43. Показов 2042. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Есть вот такая программа:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int quan (char *s)
{ 
    int i=0;
    while((*s+i)!=EOF)
    {
        i++;
    }
    printf("%d",i-1);
}
 
int main()
{
    char s1[100];
    gets(s1);
    quan(&s1[0]);
    getchar();
}
К сожалению, она не работает, и я не понимаю по какой причине.
Компилируется, но не работает. Прошу помощи, заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2013, 17:43
Ответы с готовыми решениями:

программа для подсчета, сколько N-символьных слов (число N вводится пользователем) содержится во введенной строке символов
нужна программа для подсчета, сколько N-символьных слов (число N вводится пользователем) содержится...

Написать функцию для подсчета символов в строке
Требуется написать функцию для подсчета символов в строке. Я вроде бы написал.. Но Функция...

Программа для подсчета символов
Здравствуйте! Люди пожалуйста помогите написать программу для подсчета символов но string...

Написать функцию для подсчета нецифровых символов в строке
Подскажите пожалуйста, как написать функцию для подсчета нецифровых символов в строке. Сам не могу...

11
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.04.2013, 18:41 2
6-ую строку замените на while (*(s+i) != 0)
1
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
14.04.2013, 19:54  [ТС] 3
anmartex, благодарю, все заработало!

Добавлено через 59 минут
Но вот в продолжение у меня такой вот вопрос:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int quan (char *s)
{ 
    int i=0;
    while(*(s+i)!=0)
    {
        i++;
    }
    printf("%d",i-1);
}
int main()
{   char *s4, *s5, *s6;
    s4=&s1[0];
    s5=&s2[0];
    s6=&s3[0];
    char ss[3]={*s4, *s5, *s6};
    quan(ss[0]);
    
    getchar();
}
Данная программа не работает, так как у меня в функцию quan принимается адрес, а у меня в элементах массива стоят указатели. Но вот мне нужна именно такая структура для дальнейшей работы, чтобы функция работала именно с элементами массива, и элементами были указатели. Как этого добиться?

Добавлено через 6 минут
Просто мне дальше необходимо будет сортировать с помощью алгоритма быстрой сортировки, будет у меня сортировать по колву-символов в строке, а тасовать уже именно указатели на строки этого массива, и в конце концов я смогу вывести этот массив уже с отсортированными указателями.
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.04.2013, 20:04 4
georgfour, функция quan подсчитывает количество символов в строке. Так что же вы от неё хотите?
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
14.04.2013, 20:10  [ТС] 5
Я хочу, чтобы потом можно было использовать алгоритм быстрой сортировки.
То есть чтобы каждому элементу массива было сопоставлено некоторое количество символов, необходимое для сортировки в порядке возрастания. А сортировалсиь уже непосредственно элементы данного массива.

Тут нет пока алгоритма сортировки поскольку я не могу применить функцию к элементам данного массива.

Добавлено через 3 минуты
Может быть сделать два массива - в одном указатели, а в другом количества символов строк, количества записаны в порядке, в котором записаны указатели в массиве. И сортировка происходила по количеству, но перемещались бы элементы массива указателей ?
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
14.04.2013, 20:24 6
georgfour, так, ну вроде понял. Приведённый пример является чисто демонстрационным (не более того), и был написан только чтобы ответить на ваши вопросы. Алгоритм сортировки - сортировка выбором.
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
#include <stdio.h>
 
int Quan(const char *s)
{
   char* str = s;
 
   while (*str++) { ; }
 
   return str - s - 1;
}
 
void Swap(char** a, char** b)
{
   char* tmp = *a;
   *a = *b;
   *b = tmp;
}
 
void Sort(char* ss[], size_t nSs)
{
   size_t i, j;
   size_t min;
 
   for (i = 0; i < nSs - 1; ++i)
   {
      min = i;
      for (j = i + 1; j < nSs; ++j)
      {
         if (Quan(ss[min]) > Quan(ss[j]))
         {
            min = j;
         }
      }
 
      Swap(&ss[min], &ss[i]);
   }
}
 
int main()
{
   char* ss[4] = {"system", "of", "a", "down"};
   size_t i;
 
   Sort(ss, 4);
 
   for (i = 0; i < 4; ++i)
   {
      printf("%s\n", ss[i]);
   }
 
   return 0;
}
1
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
14.04.2013, 21:24  [ТС] 7
Спасибо, сейчас буду разбираться )

Добавлено через 57 минут
Немного не понимаю, что означает вот эта запись, а конкретно звездочка после char:
char* ss[4] = {"system", "of", "a", "down"};
0
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 3
14.04.2013, 21:32 8
Нужна помощь! Написать программу реализующую алгоритм Прима!!!!желательно с пояснениями. цена до 500 р
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
14.04.2013, 21:37  [ТС] 9
Я вот не знаю, как можно вывести получившиеся значения после сортировки, то есть у меня стоит в массиве указатель * на данные, и при выводе я не знаю, как вывести по порядку следующие данные, то есть если просто прибавлять к указателю по единице, то прибавляться будет не к адресу, а к данным, которые лежат по адресу.
Как можно вывести последующие данные в таком случае ?

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
#include <stdio.h>
 int quan (char *s)
{ 
    int i=0;
    while(*(s+i)!=0)
    {
        i++;
    }
    return i;
 
int main()
{   
 
char s1[100];
    gets(s1);
    char *s4;
    s4=&s1[0];
    char ss[3]={*s4};
    a=quan(s4);
    
    int k=0;
    
    for(k=0;k<a;k++)
        {
            printf("%c", ss[0]++);
        }
}
Такая вот штука не работает, а я хочу, чтобы выводилась необходимая строка.

P.S я понимаю, что с одним элементом массива попытка такого ввода выглядит странно, но после сортировки нескольких указателей в массиве они будут перемешаны, и выводить их уже придется именно так, дабы соблюсти порядок.
0
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,172
15.04.2013, 04:00 10
Цитата Сообщение от georgfour Посмотреть сообщение
Немного не понимаю, что означает вот эта запись, а конкретно звездочка после char:
Это как раз и есть объявление массива указателей char.

Я так и не могу до конца вас понять. Т.е. у вас есть одна строка, и имеется массив, элементы которого есть указатели на начала слов основной строки (см. рисунок ниже). Правильно ли я понял?

Программа для подсчета символов в строке с указателями


Если да, то функция quan никак не поможет, ибо она ищет завершающий ноль символ ('\0'), а он будет у вас один на всех (в конце базовой строки)
0
Заблокирован
15.04.2013, 04:11 11
Цитата Сообщение от georgfour Посмотреть сообщение
Но вот мне нужна именно такая структура для дальнейшей работы, чтобы функция работала именно с элементами массива, и элементами были указатели. Как этого добиться?
ты что почкалист?! йазыг си все это тебе откроет! люблю тебя анон
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
17.04.2013, 23:44  [ТС] 12
Ладно.
Я просто не понимаю, что значит массив указателей.
Это просто куча последовательно расположенных указателей на каждый символ этого огромного массива, где последовательно записаны все строки , так?
Если так, то как тогда мы сможем отсортировать все эти строки ?
Перенося поочередно каждый указатель на каждый символ или как?

Никак не могу с эти разобраться.
Проштудировал Кернигана, но там этот момент как-то пропускается

Добавлено через 2 часа 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <conio.h>
 
int Quan(char *s)
{
   char* str = s;
 
   while (*str++) { ; }
 
   return str - s - 1;
}
 
 
 
 
 void qSort(char *A[], int low, int high) {
      int i = low;                
      int j = high;
      int x = Quan(A[(low+high)/2]);  // x - опорный элемент посредине между low и high
      do {
          while(Quan(A[i]) < x) ++i;  // поиск элемента для переноса в старшую часть
          while(Quan(A[j]) > x) --j;  // поиск элемента для переноса в младшую часть
          if(i <= j){           
              // обмен элементов местами:
              char *temp = A[i];
              A[i] = A[j];
              A[j] = temp;
              // переход к следующим элементам:
              i++; j--;
          }
      } while(i < j);
      if(low < j) qSort(A, low, j);
      if(i < high) qSort(A, i, high);
 
}
int main()
{   
    int i =0, low=0, high=2;
    char s1[100], s2[100], s3[100];
    gets(s1);
    gets(s2);
    gets(s3);
    char *ss[3]={s1, s2, s3};
  
    qSort(ss, low, high);
  
 
   for (i = 0; i < 3; ++i)
   {
      printf("%s\n", ss[i] );
   }
   
   
 
   
        
    getch();
    
    
}
0
17.04.2013, 23:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2013, 23:44
Помогаю со студенческими работами здесь

Машина Тьюринга для подсчета заданных символов в строке
построить машину тьюринга,ответ пожайулста можно в виде таблицы дабы понятнее было Правила форума:...

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

Программа для подсчета количества букв в строке!
Как на Турбо Паскале написать программу для подсчета всех русских букв используемых в написанной...

Программа для подсчета количества цифр в строке
С клавиатуры вводится строка. Составить программу, которая подсчитывает количество цифр в тексте;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru