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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
#1

Порядковый номер буквы в строке - C++

17.01.2011, 15:58. Просмотров 1156. Ответов 4
Метки нет (Все метки)

Есть прога, выводит в алф. порядке буквы, вход в текст по одному разу. Не знаю как сделать, чтобы выводила собственно номер первой найденной буквы, например:
ввели
bba ggy uuh
вывело a y h
номер, на котором стоит а - 3

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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
 
const int alph_length = 26;
 
 
int main() {
        int i;
        char text[81];
        char *p;
 
        int letters_encountered[alph_length];
 
        for(i = 0;i< alph_length ; i++ ) 
             letters_encountered[i]=0;
 
        fgets(text,80,stdin);
 
        p = text;
 
        while(*p!=0) {
                if(*p< 'a' || *p > 'z') {
 
                        p++;
                        continue;
                };
 
                letters_encountered[*(p++) -'a']++;
        };
 
        for(i=0;i<alph_length;i++) { 
                if(letters_encountered[i]==1)
                        printf("%c ",'a'+(char)i );
 
        };
        return 0;
 
}
Добавлено через 6 минут
тьфу, то есть 2, а не 3)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 15:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Порядковый номер буквы в строке (C++):

В заданной строке заменить буквы на их порядковый номер. - C++
В заданной строке, состоящей из цифр и латинских букв, заменить буквы на их порядковый номер в алфавите. Получившуюся строку вывести на...

Найти порядковый номер слова максимальной длины в строке и номер позиции, с которой оно начинается - C++
помогите пожалуйста с программой( среда Visual C ) Дана строка символов, состоящая из произвольного текста, слова разделены пробелами....

Вывести порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается - C++
как вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается ?

Вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно начинается - C++
и так, вот условие: дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Вывести на экран порядковый номер...

порядковый номер буквы - C++
очень простая функция, возвращающая порядковый номер буквы в алфавите, но она возвращает всякую хрень. при вводе 'я' return 17 при вводе...

В последовательности введенных символов (последний '$') определить порядковый номер первой буквы R - C++
В последовательности введенных символов (последний '$') определить порядковый номер первой буквы R (с учетом верхнего/нижнего регистров) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.01.2011, 16:23 #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
#include <cstdio>
 
struct SymbolInfo {
  size_t count;
  size_t position;
};
 
int main(int argc, char *argv[]) {
  char string[] = "bba ggy uuh\0";
 
  SymbolInfo symbols_info['z' - 'a'] = {{0, 0}};
 
 
  size_t symbol_counter = 0;
  for (char *current_symbol = string; *current_symbol != '\0';
       ++current_symbol, ++symbol_counter)
    if (*current_symbol >= 'a' && *current_symbol <= 'z') {
      ++symbols_info[*current_symbol - 'a'].count;
      symbols_info[*current_symbol - 'a'].position = symbol_counter;
    }
 
  for (size_t i = 0; i < 'z' - 'a'; ++i)
    if (symbols_info[i].count == 1)
      printf("%c : %d time(s), at %d\n", 'a' + i,
             symbols_info[i].count, symbols_info[i].position);
  return 0;
}
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
17.01.2011, 16:29  [ТС] #3
а с ручным вводом как сделать?

Добавлено через 4 минуты
и возможно, чтобы только номер первого выводил?
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
17.01.2011, 16:37 #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
/*
  выводит в алф. порядке буквы, вход в текст по одному разу. Не знаю
  как сделать, чтобы выводила собственно номер первой найденной буквы,
*/
#include <cstdio>
 
struct SymbolInfo {
  size_t count;
  size_t position;
};
 
int main(int argc, char *argv[]) {
  size_t k_buffer_size = 2048;
  char *string = new char[k_buffer_size];
  fgets(string, k_buffer_size, stdin);
 
  SymbolInfo symbols_info['z' - 'a'] = {{0, 0}};
 
 
  size_t symbol_counter = 0;
  for (char *current_symbol = string; *current_symbol != '\0';
       ++current_symbol, ++symbol_counter)
    if (*current_symbol >= 'a' && *current_symbol <= 'z') {
      ++symbols_info[*current_symbol - 'a'].count;
      symbols_info[*current_symbol - 'a'].position = symbol_counter;
    }
 
  for (size_t i = 0; i < 'z' - 'a'; ++i)
    if (symbols_info[i].count == 1)
      printf("%c : %d time(s), at %d\n", 'a' + i,
             symbols_info[i].count, symbols_info[i].position);
 
  delete [] string;
  return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от apachan Посмотреть сообщение
и возможно, чтобы только номер первого выводил?
Не понял фразы, но скорее всего возможно.
vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
17.01.2011, 16:41 #5
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
61
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
 
 
const int alph_length = 26;
 
 
int get_first_pos(char *p, char ch)
{
  char* tmp=p;
  while(*p!='\0')
    {
      if(*p == ch) return p-tmp; 
      p++;
    }
  return 0;
}
 
 
int main() {
        int i;
        char text[81];
        char *p;
 
        int letters_encountered[alph_length];
 
        for(i = 0;i< alph_length ; i++ ) 
             letters_encountered[i]=0;
 
        cin.getline(text,80); //если уж на плюсах пишем, то плюсами и пользуемся :)
 
        p = text;
 
        while(*p!='\0') 
      { 
        if(isalpha(*p)) letters_encountered[*(p+1)-'a']++;
        p++;
        //letters_encountered[*(p++) -'a']++;//никогда так не пишите
        //на разных компиляторах такое действие может быть выполнено
        //в разлычном порядке.
        //И еще, что будет если *(p+1)='\0' ? численный код знака 'a'
        //больше, чем символа конца строки. получается, что ваша строка
        //приобретает вид p[-n]++.
        
       
      }//; // зачем вы пихаете здесь нулевую инструкцию? ; здесь не нужна
    
        for(i=0;i<alph_length;i++)
      if(letters_encountered[i]==1)
        {
          printf("%c ",'a'+(char)i );
          printf("%d ",get_first_pos(text,'a'+char(i))+1);
        }
    
     
        return 0;
    
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 16:41
Привет! Вот еще темы с ответами:

Определить порядковый номер первой буквы R (с учетом верхнего/нижнего регистров) - C++
В последовательности введенных символов (последний '$') определить порядковый номер первой буквы R (с учетом верхнего/нижнего регистров)

Вывести на экран порядковый номер слова,накрывающего К-ю позицию в строке - C++
Дана строка символов, состоящая из произвольного текста,слова разделены пробелами.Вывести на экран порядковый номер слова,накрывающего К-ю...

Вывести самое длинное слово и его порядковый номер в исходной строке - C++
Здраствуйте,мне нужно вывести самое длинное слово и его порядковый номер в исходной строке.Спасибо

10.31. Даны два предложения, в которых имеются буквы ш. Найти, в каком из них эга буква имеет больший порядковый номер (при счете от начала предложени - C++
10.31. Даны два предложения, в которых имеются буквы ш. Найти, в каком из них эга буква имеет больший порядковый номер (при счете от начала...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.01.2011, 16:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru