Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Devastator1
4 / 4 / 0
Регистрация: 12.10.2010
Сообщений: 21
#1

Определить количество слов в строке и вывести на экран слова строки в столбик - C++

13.10.2010, 17:43. Просмотров 996. Ответов 10
Метки нет (Все метки)

Добрый вечер! Помогите разобраться:

Исходное задание:
Дана строка текста, в которой слова разделены символами # и пробелами.

А) определяет количество слов в строке и выводит на экран слова этой строки в столбик;
(решено)

Б) находит самое короткое слово(решено) и его порядковый номер в строке, определить сколько раз буква «N» встречается в этом слове.

Остались вопросы: как определить порядковый номер самого короткого слова? как определить сколько раз буква "N" встречается в этом слове?

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

т.е если исходная строка: привет как дела
первая функция обработала: привет
вторая функция получит на вход: привет

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
void small( char string[] )
{
        const char delimiters[] = " #" ; 
        char *word, *minword = 0;
        size_t minnumber = 150;
        word = strtok(string, delimiters);
 
        while(word != 0) {
                if(minnumber > strlen(word)) {
                        minnumber = strlen(word);
                        minword = strdup(word);
                }
                word = strtok(NULL, delimiters);
        }
 
        cout<<"The smaller word: "<<minword<<endl;
 
}
void num( char string[] )
{
const char delimiters[] = " #"; 
char **words = NULL, *p = NULL;
int i;
int cnt=0;
 
for ( p = strtok(string, delimiters); p != NULL; p = strtok(NULL, delimiters) )     
{
            if ( ( words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL ){
                    cout<<"No memory";
                    exit(1);
            }
            if ( ( words[cnt] = strdup(p) ) == NULL ){
                    cout<<"Duplicate word!!!";
                    exit(1);
            }
            ++cnt;
    }
    
   cout<<"Kol-vo slov in string: "<<cnt<<endl;
    
   for ( i = 0; i < cnt; ++i )
   {
            cout<<words[i]<<endl;
   }
    for ( i = 0; i < cnt; ++i ){
            if ( words[i] != NULL ){
                    free(words[i]);
                    words[i] = NULL;
            }
    }
    free(words);
    words = NULL;
}
int main()
{  
char string[]="privet kak dela#idut#normalno";
char string1[]="privet kak dela#idut#normalno";
num(string);
small(string1);
system("pause");            
return 0;
}
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2010, 17:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить количество слов в строке и вывести на экран слова строки в столбик (C++):

Определить и вывести на экран количество слов во введеной строке - C++
определить и вывести на экран количество слов во введеной строке

Подсчитать количество слов и определить и вывести на экран максимальное и минимальное слова и их длину. - C++
Помогите сделать программу, нужно чтоб была хотя бы одна подпрограмма. Желательно на СИ. Подсчитать количество слов и определить и...

Подсчитать количество слов и определить и вывести на экран максимальное и минимальное слова и их длину. - C++
Подсчитать количество слов и определить и вывести на экран максимальное и минимальное слова и их длину. Помогите...

Вывести все слова из каждой строки, начинающиеся и заканчивающиеся на заданную букву и количество таких слов в каждой строке. - C++
Ребят, всем привет!; Помогите, пожалуйста, решить задачу со строками на С++; Даны две строки, содержащие не более 100 символов. ...

Разделить строку на слова, вывести в столбик, подсчитать количество слов с буквой "а" - C++
Здравствуйте! Я новичок в этом деле. застопорился на строках Прошу помощи у вас Мне надо решить пару задач : 1. Дана строка, мне...

Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение. - C++
Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом...

10
Crudelis
Шаровик затейник
675 / 417 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
13.10.2010, 17:58 #2
Цитата Сообщение от Devastator1 Посмотреть сообщение
плюс у меня есть две функции в которые я передаю строку, проблема в том, что если одна функция эту строку обработала, то вторая функция принимает значение строки после обработки первой функции.
передавая в функцию строку, создайте временную и запишите в временную передаваемую строку, в функции работайте в временной строкой
1
Devastator1
4 / 4 / 0
Регистрация: 12.10.2010
Сообщений: 21
14.10.2010, 17:55  [ТС] #3
Цитата Сообщение от Crudelis Посмотреть сообщение
передавая в функцию строку, создайте временную и запишите в временную передаваемую строку, в функции работайте в временной строкой
спасибо за подсказку. сделал.

а по порядковому номеру кто нить подскажет?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
14.10.2010, 18:05 #4
Devastator1,

как определить порядковый номер самого короткого слова?
Дан массив слов? Тогда просто ищем самое короткое слово и запоминаем его номер в переменную

как определить сколько раз буква "N" встречается в этом слове?
Посчитать. Циклом по всему слову, если символ равен нужной букве, прибавляем единицу к счетчику.
1
Devastator1
4 / 4 / 0
Регистрация: 12.10.2010
Сообщений: 21
14.10.2010, 18:19  [ТС] #5
Цитата Сообщение от Lavroff Посмотреть сообщение
Devastator1,



Дан массив слов? Тогда просто ищем самое короткое слово и запоминаем его номер в переменную

дано:

char string[]="privet kak dela#idut#normalno";

ищем слово:

C
1
2
3
4
5
6
7
while(word != 0) {
                if(minnumber > strlen(word)) {
                        minnumber = strlen(word);
                        minword = strdup(word);
                }
                word = strtok(NULL, delimiters);
        }
что нужно доработать в этом цикле, чтобы он считал номер слова?
1
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
14.10.2010, 18:26 #6
Самому создать масив слов. От пробела до пробела. Ну или #.
1
Devastator1
4 / 4 / 0
Регистрация: 12.10.2010
Сообщений: 21
14.10.2010, 18:33  [ТС] #7
Цитата Сообщение от Unforgiven_00 Посмотреть сообщение
Самому создать масив слов. От пробела до пробела. Ну или #.
на примере можно? т.е мою строку переместить в массив?
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
14.10.2010, 22:20 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Devastator1 привет!

Посмотри вот этот код

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
#include <iostream>
#include <string.h>
using namespace std;
 
char* findtheless (char * A, int mlq){
    char *p = A;
 
        int wq = 0;
        int clq = 0;
        
 
    while (*(A)){
 
                
    
        if ((*(A) == ' ')){
        
            if (clq < mlq){
            
                mlq = clq ;
                p = A-mlq ;
                clq = 0;
                A++;
            }else {
 
                
                clq = 0;
                A++;
            }
        
        }else if (!(*(A+1))){
        
            if (clq < mlq){
 
                mlq = clq + 1;
                clq++;
                p = A-mlq +1;
                A++;
 
            }else{
                A++;
                clq++;
            }
        }else {
 
        
        A++;
        clq++;
        }
        
    }
 
 
    
        //cout << &p << endl;
        //cout << p << endl;
 
        
    //cout << mlq << "  "<< clq  << endl;
 
    return p;
}
 
int main(void){
 
    char s1[80];
    gets (s1);
    
    cout << findtheless(s1, sizeof(s1)/sizeof(char)) << endl;
 
 
}
может чем поможет...

функция findtheless возвращает указатель на минимальное слово или на пробел если с него начинается предложение или пробел повторяется два раза подряд... (можешь сам попробовать заточить под #)

Логика в коде далеко не идеальна, но вроде работает...

Жду критику плиз...
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
14.10.2010, 22:25 #9
Don Vito, А ведь есть strtok...
1
Don Vito
9 / 9 / 1
Регистрация: 22.11.2009
Сообщений: 162
14.10.2010, 22:29 #10
Lavroff, привет!

Я не знал про эту функцию))

Будь другом, посмотри пожалуйста мой код, хочу критики.))

Спасибо!
0
Devastator1
4 / 4 / 0
Регистрация: 12.10.2010
Сообщений: 21
01.11.2010, 18:51  [ТС] #11
сделал.

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
void small( char t[] )
{
        const char delimiters[] = " #" ; 
        char *word, *minword = 0;
        size_t minnumber = 150;
        int a=0, z=0;
        word = strtok(t, delimiters);
 
        while(word != 0) {
                if(minnumber > strlen(word)) {
                        minnumber = strlen(word);
                        minword = strdup(word);
                        z++;
                }
                word = strtok(NULL, delimiters);
        }
        for(int i=0;i<strlen(minword);i++)
        {
        if(minword[i]=='a')
        {
                a++;
                
        }
 
        }
 
        cout<<"The smaller word: "<<minword<<" i poziciya slova v stroke: "<<z<<endl;
        cout<<"Symbol a vstrechaetsya v slove "<<minword<<" "<<a<<" raz"<<endl;
}
void num( char s[] )
{
const char delimiters[] = " #"; 
char **words = NULL, *p = NULL;
int i;
int cnt=0;
 
for ( p = strtok(s, delimiters); p != NULL; p = strtok(NULL, delimiters) )      
{
          words = (char**)realloc(words, sizeof(char*) * (cnt + 1)) ) == NULL )
                   
          words[cnt] = strdup(p) == NULL 
                   
            ++cnt;
    }
    
   cout<<"Kol-vo slov in string: "<<cnt<<endl;
    
   for ( i = 0; i < cnt; ++i )
   {
            cout<<words[i]<<endl;
   }
    for ( i = 0; i < cnt; ++i ){
            if ( words[i] != NULL ){
                    free(words[i]);
                    words[i] = NULL;
            }
    }
    free(words);
    words = NULL;
}
int main()
{  
char string[]="privetttt kak dela#idut#normalno";
char string1[]="privet kak dela#idut#normalno";
small(string);
num(string1);
system("pause");            
return 0;
}
1
01.11.2010, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2010, 18:51
Привет! Вот еще темы с ответами:

В строке, состоящей из слов, найти и вывести на экран все слова, начинающиеся на букву w - C++
В строке , состоящей из слов , найти и вывести на экран все слова , начинающиеся на букву w .

Оределить количество слов в строке и вывести на экран каждое нечетное слово - C++
Дана строка текста, в которой слова разделены запятыми и двоеточиями. Необходимо: а) оределить количество слов в строке и вывести на...

Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова. - C++
Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова.

Ввести строку и слово. Вывести количество слов в строке, имеющих длину, равную длине введенного слова. - C++
Как ввести строку и слово, чтобы вывести количество слов в строке, имеющих длину, равную длине введенного слова. Помогите плз.


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

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

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