Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
13 / 13 / 4
Регистрация: 07.12.2010
Сообщений: 127
1

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

17.01.2011, 15:58. Показов 2943. Ответов 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)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2011, 15:58
Ответы с готовыми решениями:

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

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

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

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

4
3371 / 1583 / 548
Регистрация: 29.11.2010
Сообщений: 3,242
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;
}
1
13 / 13 / 4
Регистрация: 07.12.2010
Сообщений: 127
17.01.2011, 16:29  [ТС] 3
а с ручным вводом как сделать?

Добавлено через 4 минуты
и возможно, чтобы только номер первого выводил?
0
3371 / 1583 / 548
Регистрация: 29.11.2010
Сообщений: 3,242
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 Посмотреть сообщение
и возможно, чтобы только номер первого выводил?
Не понял фразы, но скорее всего возможно.
1
191 / 175 / 12
Регистрация: 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;
    
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2011, 16:41

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

В каждой строке матрицы найти и вывести минимальный элемент и его порядковый номер в строке
Ребята, хэлп! Помогите с задачей... Дана матрица А. В каждой строке матрицы найти и вывести...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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