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

Отсортировать слова в предложении по алфавиту и подсчитать количество слов - C++

Восстановить пароль Регистрация
 
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 171
14.01.2013, 09:29     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #1
отсортировать слова в предложении по алфавиту и подсчитать количество слов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 09:29     Отсортировать слова в предложении по алфавиту и подсчитать количество слов
Посмотрите здесь:

C++ Как можно подсчитать количество слов в предложении?
C++ Подсчитать количество слов и определить и вывести на экран максимальное и минимальное слова и их длину.
C++ Отсортировать слова в предложении по алфавиту
Подсчитать количество слов и определить и вывести на экран максимальное и минимальное слова и их длину. C++
C++ В строку через пробел вводятся слова. Отсортировать введенные слова по алфавиту. Результат вывести в виде столбца.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.01.2013, 12:59     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #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
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
62
63
64
65
66
67
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <string>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
#include <list>
 
template<class Inserter>
void tokenize(const std::string &string, const std::string &separators,
  Inserter inserter) {
  std::string::size_type position = 0, lastPosition = 0;
  
  while (position < string.length()) {
    position = string.find_first_of(separators, lastPosition);
    
    if (position == std::string::npos) {
      position = string.length();
    }
 
    if (position != lastPosition) {
      *inserter++ = std::string(string.begin() + lastPosition,
        string.begin() + position);
    }
    lastPosition = position + 1;
  }
}
 
template <class Iterator>
std::string join(Iterator begin, Iterator end, std::string separator) {
  std::string result;
  while (begin != end) {
    result += *begin++;
    if (begin != end) {
      result += separator;
    }
  }  
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  
  std::string sentence = "\"Knowledge comes by eyes always open and working hard, and there is no knowledge that is not power\". Jeremy Taylor (1613-1667)";
  std::cout << "Sentence is: " << sentence << std::endl;
  
  std::list<std::string> words;
 
  tokenize(sentence, " ,_+=()[]{}&^%$#@-.?!`~\"'",
    std::inserter(words, words.begin()));
 
  std::cout << "Words are: " << join(words.begin(), words.end(), ",") <<
    std::endl;
 
  words.sort();
  std::cout << "Sorted words are: " << join(words.begin(), words.end(), ",") <<
    std::endl;
    
  std::cout << "There " << ((words.size() == 1) ? "is " : "are ") <<
    words.size() << " word" << ((words.size() == 1) ? " " : "s ") <<
    "in the sentence." << std::endl;
  
  std::cin.peek();
  return 0;
}
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
14.01.2013, 14:20     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #3
strtok
alex-net
3 / 3 / 1
Регистрация: 27.11.2012
Сообщений: 171
15.01.2013, 20:49  [ТС]     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #4
Спасибо конечно, но я б не смог такую прогу объяснить препаду, но экзамен я сдал на 4)))
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.01.2013, 03:14     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #5
Вот вариан со strtok, как предложил m1Rr0r и динамическим выделением памяти. Хотелось бы также заметить, что прописные символы "меньше" строчных, поэтому слова с заглавной буквы будут стоять первыми. Если хотите избежать этого эффекта нужно влючить проверку использую функцию toupper().
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cctype>
 
/* Функция pushline выделяет динамическое пространство
   для строки и должна быть "освобождена" при помощи функции free() */
char* pushline();
char* sortline(char *, int *);
 
int main()
{
    printf("Put a line:\n");
    char *s = pushline();
    int n = 0;
    
    s = sortline(s, &n);
    printf("\nNow we have new line:\n");
    printf("%s", s);
    printf("\n\n..which contain %d words.\n", n);
 
    /* free */
    free(s);
 
    return 0;
}
 
char* pushline()
{
    int c, i = 0;
    char *str = NULL;
 
    while ((c = getchar()) != EOF && c != '\n') {
        str = (char*)realloc(str, (i+2) * sizeof(char));
        str[i++] = c;
    }
    str[i++] = '\n';
    str[i] = '\0';
 
    return str;
}
 
char* sortline(char *line, int *n)
{
    size_t lsize = strlen(line) + 1;
    int i = 0;
    char *ptr = NULL;
    /* lsize/2 взято в расчете на то, что минмальное слово
       состоит из 2х символов: одного прописного символа
       и одного пробельного символа */
    char *parr[lsize/2]; // массив указателей
    ptr = strtok(line, " \n\t\b");
    parr[i] = (char*)calloc(lsize*2, sizeof(char));
    strcpy(parr[i], line);
    for ( ++i; ptr; ++i) {
        ptr = strtok('\0', " \n\t\b");
        if (ptr != NULL) {
            parr[i] = (char*)calloc(lsize*2, sizeof(char)); ;
            strcpy(parr[i], ptr);
        }
    }
    *n = --i;
    /* sort and push*/
    line[0] = '\0';
    for (char **pt_main = parr, **pt_end = parr + i; pt_main != pt_end; ++pt_main) {
        char **pt_min = pt_main;
        for (char **pt_sub = pt_main + 1; pt_sub != pt_end; ++pt_sub)
            if (*pt_min != '\0' && *pt_sub != '\0' && (strcmp(*pt_min, *pt_sub) > 0))
                pt_min = pt_sub;
        char *tmp_word = (char*)malloc((lsize*2) * sizeof(char));
        strcpy(tmp_word, *pt_main);
        strcpy(*pt_main, *pt_min);
        strcpy(*pt_min, tmp_word);
        strcat(line, *pt_main);
        (pt_main == pt_end - 1) ? strcat(line, "\0") : strcat(line, " ");
        free(tmp_word);
    }
 
    while (i)
        free(parr[--i]);
    return line;
}
Добавлено через 11 минут
Да, кстати заголовок <cctype> можно убрать и 68 строку просто заменить на
C++
1
if (strcmp(*pt_min, *pt_sub) > 0)
Добавлено через 23 часа 43 минуты
Можно даже ещё сделать проще: 20 строчик кода:
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
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
#include <cctype>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string str;
    vector<string> v;
    int count = 0;
 
    for (char c; (c = getchar()) != EOF; ) {
        if (!isspace(c)) {
            str += c;
        }
        else {
            if (!str.empty()) {
                v.push_back(str);
                ++count;
            }
            str = '\0';
        }
        if (c == '\n')
            break;
    }
    sort(v.begin(), v.end());
    for (vector<string>::const_iterator i = v.begin(); i != v.end(); ++i) {
        cout << *i;
        (i == v.end() - 1) ? cout << '\n' : cout << ' ';
    }
    cout << "String has " << count << " characters.\n";
 
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
17.01.2013, 08:54     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>
 
int main()
{
    std::multiset<std::string> s((std::istream_iterator<std::string>(std::cin)),
                                  std::istream_iterator<std::string>() );
    std::copy(s.begin(), s.end(), std::ostream_iterator<std::string> (std::cout, " ") );
    std::cout << std::endl << s.size() << std::endl;
}
-=ЮрА=-
Заблокирован
Автор FAQ
17.01.2013, 11:19     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #7
alex-net, держи
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 <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
 
bool bComp (string left,string right) 
{
    return tolower(left[0]) < tolower(right[0]);
}
 
int main()
{
    string word;
    vector <string> words;
    cout<<"Input :"<<endl; 
    //Ââîä
    while((cin>>word))
    {
        words.push_back(word);
        if(cin.get() == '\n')
            break;
    }
    //ÑîðòèðîâêГ*
    sort(words.begin(), words.end(), bComp);
    //Âûâîä
    cout<<"Output:"<<endl; 
    cout<<"Number of words in sentence : "<<words.size()<<endl;
    for(int i = 0; i < words.size(); i++)
        cout<<words[i]<<endl;
    return 0;
}
Миниатюры
Отсортировать слова в предложении по алфавиту и подсчитать количество слов  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 17:17     Отсортировать слова в предложении по алфавиту и подсчитать количество слов
Еще ссылки по теме:

C++ Даны N предложений. Подсчитать количество слов в каждом предложении и вывести на печать
сортировка слов в предложении по алфавиту C++
C++ Подсчитать количество слов во введенном предложении

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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.01.2013, 17:17     Отсортировать слова в предложении по алфавиту и подсчитать количество слов #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
alex-net, держи
Юра, отличный код...
Особенно порадовала конструкция:
C++
1
2
3
4
5
6
    while((cin>>word))
    {
        words.push_back(word);
        if(cin.get() == '\n')
            break;
    }
Yandex
Объявления
17.01.2013, 17:17     Отсортировать слова в предложении по алфавиту и подсчитать количество слов
Ответ Создать тему
Опции темы

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