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

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

Войти
Регистрация
Восстановить пароль
 
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
#1

Строки в С++, не могу понять что неправильно в программе - C++

24.11.2011, 16:08. Просмотров 682. Ответов 11
Метки нет (Все метки)

Необходимо: 1) Найти количество слов в строке, 2) вывестии все слова в порядке возрастания длинн,
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <conio.h>
 
void main()
{
 clrscr();
 int i,x,y,y2;
 char st[100], st2[100],sti[100];
 char *lex;
 cin.getline(st,100,'\n');                      //vvod stroki
 strcpy(st2,st);                                //stroka dlya 2-go yslovia
 
//1-й пункт
 cout<<"Ishodnaya stroka: "<<st<<endl;
 y=1;
 for(i=1;i<=strlen(st);i++)
  if (st[i]==' ')
   y+=1;
 cout<<"kolichestvo slov:  "<<y;
 
//2-й пункт
 i=1; strcpy(sti,""); y2=0;
 while (y2!=y)
 {
  strcpy(st2,st);
  lex=strtok(st2," ");
  while(lex!=NULL)
  {
   if (strlen(lex)==i)
   {
    y2++;
    strcat(sti,lex);
    strcat(sti," ");
   }
   lex=strtok(NULL," ");
  }
  i++;
 }
 cout<<"\niskomaia  stroka - "<<sti;
 
//3-й пункт
 strcpy(sti,"");  i=1; y2=0;
 strcpy(st2,st);
 lex=strtok(st2," ");
 
 for (int i=0; i<strlen(lex); i++)                                //сдесь компилятор матерится
 {
     for (int j=0; j<strlen(lex); j++)
     if (lex[i] == lex[j] && i!=j)
     {
        sti +=(" "+lex[j]);
         } 
 } 
 
 y=1;
 for(i=1;i<=strlen(sti);i++)
  if (sti[i]==' ')
   y+=1;
 cout<<"kolichestvo odinakovyx slov:  "<<y;
 
 getch();
}
собственно проблемы с третим пунктом задания.

прошу помощи, зарание спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки в С++, не могу понять что неправильно в программе (C++):

Не могу понять, что неправильно с float - C++
Всем здравствия. Прошу прощения за глупый вопрос, но споткнулся на ровном, и не могу понять, что не так. int vsego = 282; int...

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

Не могу понять, почему программа неправильно работает! - C++
Изучаю С++ по Страуструпу Б. - Программирование. Принципы и практика использования C++. Есть задание: 9. Вычислите сумму введенных...

Не могу понять где ошибка в программе - C++
Здравствуйте, вот написал программу которая должна удалять первые буквы в каждом слове, но в итоге получается что в первом слове все буквы...

Что неправильно в данной программе? - C++
Задание смотри во вложении: (Извините более высокого качества нет и не предвидится) #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

пара мелких ошибочек в программе, не могу понять в чем(( - C++
Пара мелких ошибочек в программе, не могу понять в чем(( #include &lt;math.h&gt; #include &lt;stdio.h&gt; #define N 200 /*формируем...

11
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 16:22 #2
Chif, посмотрите как можно легко бить текст на слова с помощью stringstream
Считать из файла три предложения и вывести их в обратном порядке
0
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 16:34  [ТС] #3
посмотрел, прочитал, не понял. или мне всю программу переделывать?
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 16:57 #4
Цитата Сообщение от Chif Посмотреть сообщение
посмотрел, прочитал, не понял. или мне всю программу переделывать?
Я уже это сделал(в вашем коде и iostream и strtok - это смесь плюсов и Си, в добавок в плюсах предпочтительней использовать string чем char str[])
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
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
 
int main()
{
    long i = 0,j, nWords = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî ñëîâ Гў ñòðîêå
    string str;
    string buf;
    string * pWords;
    stringstream ss;
    cout<<"Enter text : \n";
    getline(cin,str);//Âîò ГІГ*ГЄ ââîäèòñÿ string Г± ïðîáåëГ*ìè
    nWords = 0;
    ss.str(str);
    //Ñ÷èòГ*ГҐГ¬ ÷èñëî ñëîâ Гў ñòðîêå
    while(ss>>buf)
        nWords++;
    cout<<"Number words in string : "<<nWords<<endl;
    ss.clear();//Î÷èñòèëè ñòðèГ*ãïîòîê
    ss.str(str);//Г‘Г*îâГ* Г§Г*ГЇГЁГµГ*óëè Гў Г*ГҐГЈГ® ñòðîêó
    pWords = new string[nWords + 2];
    //Г‡Г*ïèñûâГ*ГҐГ¬ ñëîâГ* Гў Г¬Г*Г±Г±ГЁГў
    while(ss>>pWords[i])
        i++;
 
    int nSame = 0;//×èñëî îäèГ*Г*êîâûõ ñëîâ
    //ÑîðòèðîâêГ* ïðÿìûì âûáîðîì
    //ГЇГ® 1-Г¬ ГЎГіГЄГўГ*Г¬ ñëîâ + ïîäñ÷¸ò îäèГ*Г*êîâûõ
    for(i = 0    ;i <= nWords; i++)
    for(j = i + 1;j <= nWords; j++)
    {
        if(tolower(pWords[j][0]) < tolower(pWords[i][0]))
        {
            buf = pWords[i];
            pWords[i] = pWords[j];
            pWords[j] = buf;
        }
        if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
            nSame++;
    }
    cout<<"Sorted words\n";
    for(i = 0    ;i <= nWords; i++)
        cout<<pWords[i]<<endl;
    cout<<"Number of same words : "<<nSame<<endl;
    delete [] pWords;
    system("pause");
    return 0;
}
PS:После введенного текста (при создании проекта на старых компиляторах ) Enter нужно нажать 2 раза
2
Миниатюры
Строки в С++, не могу понять что неправильно в программе  
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 17:03  [ТС] #5
спасибо за листинг, буду разбераться.
0
-=ЮрА=-
24.11.2011, 17:13
  #6

Не по теме:

Chif, если Вам сложновато понять могу переделать под ваш ввод и чары

Цитата Сообщение от Chif Посмотреть сообщение
cin.getline(st,100,'\n');
- просто для string не нужно указывать число элементов- строка может быть произвольной длинны а так
Цитата Сообщение от Chif Посмотреть сообщение
char st[100]
мы сужаем диапазон ввода до 99 символов, вот

0
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 17:24  [ТС] #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Chif, если Вам сложновато понять могу переделать под ваш ввод и чары
хотелось бы), понимается с трудом да и прога почти готова - загвостка только под конец(я про свою прогу)
0
-=ЮрА=-
24.11.2011, 17:29
  #8

Не по теме:

Цитата Сообщение от Chif Посмотреть сообщение
загвостка только под конец(я про свою прогу)
- ладно сейчас подправлю вашу програмку, однако ваш код суржик - смесь Си и С++ (лучше не смешивать стандарты), но желание заказчика - закон)))

0
Chif
24.11.2011, 17:44  [ТС]
  #9

Не по теме:


я и не знал что это смесь, недавно изучать начал язык, и начал с С++, может книги не те или препод не ту теорию даёт)

0
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 17:51 #10
Chif, не захотел я править ваш алгоритм он мне не нравится, притом тестирование показало что алгоритм сбоит. Вот код попроще попробуйте
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char str[1024];//Áóäåò ñîäåðæГ*ГІГј ââåäåГ*Г*ûé ГІГҐГЄГ±ГІ
    char buf[1024];//ГЃГіГґГґГҐГ° äëÿ str
    char *tok;
    char delim[] = " ,;.!?";//ÂîçìîæГ*ûå Г°Г*çäåëèòåëè ìåæäó ñëîâГ*ìè
    
    cout<<"Enter text : \n";
    cin.getline(str,1024,'\n');                      
    strcpy(buf,str);                               
 
    int i = 0, j, nWords = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî ñëîâ
    //1-Г© ГЇГіГ*ГЄГІ
    cout<<"Ishodnaya stroka: "<<str<<endl;
    tok = strtok(buf,delim);
    while(tok)
    {
        nWords++;
        tok = strtok(NULL,delim);
    }
    cout<<"Number words in string : "<<nWords<<endl;
    
    //Г‘Г*îâГ* ГЁГ*èöèГ*ëèçèðóåì ГЎГіГґГґГҐГ° Г¤Г*Г*Г*ûìè ГЁГ§ str
    strcpy(buf,str);
 
    //ÑîçäГ*ВёГ¬ Г¬Г*Г±Г±ГЁГў ñëîâ
    string tmp;
    string * pWords = new string[nWords + 1];
    tok = strtok(buf,delim);
    while(tok)
    {
        pWords[i] = tok;
        tok = strtok(NULL,delim);
        i++;
    }
 
    int nSame = 0;//×èñëî îäèГ*Г*êîâûõ ñëîâ
    //ÑîðòèðîâêГ* ïðÿìûì âûáîðîì
    //ГЇГ® 1-Г¬ ГЎГіГЄГўГ*Г¬ ñëîâ + ïîäñ÷¸ò îäèГ*Г*êîâûõ
    for(i = 0    ;i < nWords; i++)
    for(j = i + 1;j < nWords; j++)
    {
        if(tolower(pWords[j][0]) < tolower(pWords[i][0]))
        {
            tmp = pWords[i];
            pWords[i] = pWords[j];
            pWords[j] = tmp;
        }
        if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
            nSame++;
    }
    cout<<"Sorted words\n";
    for(i = 0    ;i < nWords; i++)
        cout<<pWords[i]<<endl;
    cout<<"Number of same words : "<<nSame<<endl;
    delete [] pWords;
    system("pause");
    return 0;
}
1
Миниатюры
Строки в С++, не могу понять что неправильно в программе  
-=ЮрА=-
Заблокирован
Автор FAQ
24.11.2011, 17:55 #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(strcmp(pWords[i].c_str(),pWords[j].c_str()) == 0)
- так сравниваются строки(если значение 0 - то строки идентичны), на местах pWords[i].c_str() может стоять чаровская строка Читайте о ней здесь http://www.cplusplus.com/reference/clibrary/cstring/strcmp/
1
Chif
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 35
24.11.2011, 18:04  [ТС] #12
Спасибо.

Не по теме:


Я думал, что подкину кому-то работенки, а вышло наоборот, теперь придется разбираться посерьёзнее. Да, и за это тоже спасибо).

0
24.11.2011, 18:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 18:04
Привет! Вот еще темы с ответами:

строки в С++.. не могу их понять.. - C++
задание такое преобразовать строку, содержащую выражение на Си с операциями (= , == , != , а+= , а-=), в строку содержащую эти же...

не могу понять что с выводом - C++
помогите найти косяк,у меня при отрицательном &quot;a&quot; он выдаёт результат и &quot;error&quot; хотя должен только &quot;error&quot; таже проблема если b=0 a&gt;0 ...

не могу понять что не так((((( - C++
привет всем! у меня проблемка возникла компиятор никак не проглатывает мой код #include &lt;iostream&gt; using namespace std; int main() ...

не могу понять что не так - C++
задание такое : Структура &quot;книга почтой&quot;:-наименование книги;-ФИО автора;-номер по каталогу;-издательство;-колличество в...


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

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

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