Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
dark009
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 98
1

Вывести на экран алфавит строки

07.10.2014, 20:20. Просмотров 463. Ответов 6
Метки нет (Все метки)

Нужно вывести на экран алфавит слова, то есть все различные буквы. К примеру, есть слово "alfavit", нужно чтобы вывело только "alfvit". Проверяю каждый символ строки s, если он не содержится в строке a, то добавляю его к строке a. Вот код, думаю неправильно делаю добавление, помогите разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int _tmain(int argc, _TCHAR* argv[])
{
    char s[] = "alfavit";
    char a[100];
    
    for (int i = 0; i < 100; i++)
        a[i] = 0;
    
    for (int i = 0; i < strlen(s); i++)
    {
        for (int n = 0; n < strlen(a); n++)
        {
            if (s[i] != a[n])
                strncpy_s(a, s, 1);
 
        }
    
    }
    printf("%s\n", a);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2014, 20:20
Ответы с готовыми решениями:

Вывести на экран все строки данного массива одну за другой в виде целой строки
Дан двумерный массив , состоящий из букв. 5 строк и 7 столбцов. Вывести на...

Вывести массив на экран в виде таблицы, в конце каждой строки надо вывести минимальный элемент
Ребят , как вывести маленький элемент , что изменить в коде знак &quot;&gt;&quot; меняю на...

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

Строки и русский алфавит
В проге считываешь с файла строку на кириллице. Например: &quot;ололо&quot;, длину...

В текстовом файле найти длину самой длинной строки, и вывести на экран все строки данной длины
В данном текстовом файле найти длину самой длинной строки и вывести на экран...

6
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
07.10.2014, 20:54 2
Неправильно подход выбран.
еще strlen(a) становится равен нулю (т.е. холостой цикл) на каждой итерации.
C++
1
2
3
for (int i = 0; i < strlen(s); i++)
    {   //Выведи на экран и проверь strlen(a)
        for (int n = 0; n < strlen(a); n++)
неправильный, т.к. каждый новый раз если символы не равны, то должны добавлятся, а среди них может быть много одинаковых.

сокр.пример
абавга
б!=а ==>а //левая а
б!=а ==>а //правая а

можно так
C++
1
2
3
4
5
6
7
8
9
char s[] = "alfavit";
    int arr[256]={};
 
    for (int i=0;i<strlen(s);i++){
        if ((arr[s[i]]==0)) {
            arr[s[i]]++;
            cout<<s[i];
        };
    }
1
-=ЮрА=-
Заблокирован
Автор FAQ
07.10.2014, 21:06 3
dark009, держи
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 <iostream>
using namespace std;
 
long  word_length(char * word){
    long length = 0;
    while( word[length] )
           length++;
    return length;
}
 
char * move_num_chars(char alpha, char * word){
    long length= word_length(word);
    char * fnd = strchr(word,    alpha);
    while((fnd = strchr(fnd + 1, alpha)) != 0 )
        if( strcpy( fnd, fnd + 1 ) )
            word[--length] = 0;
    return word;
}
 
int main(){
    char word[] = "alfavit";
    cout<<"INPUT : "<<word<<endl;
    for( int i = 0; word[i]; i++ )
        strcpy(word, move_num_chars(word[i], word));
    cout<<"OUTPUT : "<<word<<endl;
    return 0;
}
INPUT : alfavit
OUTPUT : alfvit
http://codepad.org/gvsIq8dA
1
orange_fox
34 / 34 / 8
Регистрация: 06.04.2014
Сообщений: 189
07.10.2014, 21:11 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
#include <string>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
 
void displayUnique(const string& str)
{
    if (str.size() >= 2)
    {
        cout << str[0];
        string::const_iterator iter;
        for (iter = str.begin() + 1; iter != str.end(); ++iter)
        {
            if (find(str.begin(), iter, *iter) == iter)
            {
                cout << *iter;
            }
        }
    }
    else cout << str;
 
}
 
int main()
{
    displayUnique("aaabaaac") //abc;
 
    system("pause");
}
2
-=ЮрА=-
07.10.2014, 21:46
  #5

Не по теме:

dark009, по ссылке вариант если хотим совсем без стандартных функций работы со строками
http://codepad.org/gMAJBaUq

0
dark009
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 98
07.10.2014, 22:08  [ТС] 6
Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Неправильно подход выбран.
еще strlen(a) становится равен нулю (т.е. холостой цикл) на каждой итерации.
C++
1
2
3
for (int i = 0; i < strlen(s); i++)
    {   //Выведи на экран и проверь strlen(a)
        for (int n = 0; n < strlen(a); n++)
неправильный, т.к. каждый новый раз если символы не равны, то должны добавлятся, а среди них может быть много одинаковых.

сокр.пример
абавга
б!=а ==>а //левая а
б!=а ==>а //правая а

можно так
C++
1
2
3
4
5
6
7
8
9
char s[] = "alfavit";
    int arr[256]={};
 
    for (int i=0;i<strlen(s);i++){
        if ((arr[s[i]]==0)) {
            arr[s[i]]++;
            cout<<s[i];
        };
    }
Можете эти строчки объяснить?
C++
1
2
3
4
if ((arr[s[i]]==0)) {
            arr[s[i]]++;
            cout<<s[i];
        };
s[i] это же получается символ строки, а символ разве может быть индексом элемента массива? Или нет?
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
07.10.2014, 22:25 7

Не по теме:

-=ЮрА=-, так ведь чужие мозги можно очень быстро осадить :D
без функций работы со строками делается короче и понятнее.
и там strcpy (не совсем уже и совсем, незначительно, но такое вот но)



Добавлено через 5 минут
dark009, символ по сути число. Это ASCII код, который имеет числовое представление, поэтому может быть индексом вполне. Т.к. в char вмещается 256 символов, то достаточно массива в 256 элементов.

Здесь в моем коде код символа является индексом массива.

Добавлено через 11 минут
C++
1
2
3
4
if ((arr[s[i]]==0)) {  //Если ячейка массива для символа с кодом s[i] не встречалась
            arr[s[i]]++;  //обозначаем, что мы ее уже встретили
            cout<<s[i]; //так как встретили то, что пока еще не встречалось-выводим на экран
        };
0
07.10.2014, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2014, 22:25

Ввести элементы двумерного массива с клавы С++.Нужно вывести его на экран в виде таблицы, в конце каждой строки надо вывести самый большой элемент
Вот мой код : #include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std;...

Вывести строки на экран
Нужно вывести на экран те строки, в который встречается определенный символ. Ну...

Вывести строки символов на экран
Не получается вывести строки символов на экран, нужна помощь более опытных:...


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

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

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