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

Вывести слова строки - C++

Восстановить пароль Регистрация
 
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
02.12.2011, 18:31     Вывести слова строки #1
Нужно вывести слова из строки
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
int main(){
  char s[100] = " Every . solution , breeds ! new ? problems / ";
  char simb[10] = " .,!?/";
  int simb_begin = 0;
  int k = 0;
  for ( unsigned int i=0; i<strlen(s); i++ ){
      for ( unsigned int j = 0; i<strlen(simb); j++){
      if ( s[i] != simb[j] && s[i-1] == simb[0] ){ 
        simb_begin = k; 
      }
      }
    if ( s[i] == simb[0] && simb_begin > 0 ){ 
      for ( int j=simb_begin; j<k; j++ ){
        cout << s[j];
      }
      cout << endl;
      simb_begin = 0;
    }
    k++;
  
  }
  getch();
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
02.12.2011, 18:48     Вывести слова строки #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Можно же проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cctype>
 
int main() {
   const char *s = " Every . solution , breeds ! new ? problems / ";
 
   bool endline = true;   
   for (int i = 0; s[i]; ++i) {  
      if (isalpha(s[i])) {
         std::cout << s[i];
         endline = true;
      }
      else if (endline) {
         std::cout << std::endl;
         endline = false;
      }
   }
}
А правильнее это, наверное, делать через stringstream или boost tokenizer
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
02.12.2011, 18:51  [ТС]     Вывести слова строки #3
мне просто нужно чтобы было с использованием самых простых, пусть и громоздких, конструкций.я все-таки первый курс((

Добавлено через 1 минуту
по условию нужно использовать библиотеку из вот 5 символов и пробела
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.12.2011, 19:10     Вывести слова строки #4
Цитата Сообщение от Nevado4ka Посмотреть сообщение
по условию нужно использовать библиотеку из вот 5 символов и пробела
Замени isalpha на проверку вхождения символа в массив simb, а всё остальное как в посте №2.
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
05.12.2011, 18:28  [ТС]     Вывести слова строки #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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
#include <cctype>
 
int main() 
{
   char s[100] = " Every . solution , breeds ! new ? problems / ";
   char simb[10] = " .,!?";
 
   bool endline = true;   
   for (int i = 0; s[i]; ++i)
   {  
       for (int j = 1; j < 4; j++)
       {
           if (s[i] = simb [j]) 
           {
               cout << s[i];
               endline = true;
           }
           else if (endline)
           {
               cout << endl;
               endline = false;
           }
       }
   }
   getch();
}
что я тут не так сделала?
он выводит странные символы((
кажется я совсем дуб(((
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
06.12.2011, 06:15     Вывести слова строки #6
Цитата Сообщение от Nevado4ka Посмотреть сообщение
for (int j = 1; j < 4; j++)
При этом в simb у тебя ПЯТЬ символов. И индексация с нуля в С++ начинается.

Цитата Сообщение от Nevado4ka Посмотреть сообщение
if (s[i] = simb [j])
Это присваивание, а не сравнение
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
06.12.2011, 09:45  [ТС]     Вывести слова строки #7
Вот что выходит
Миниатюры
Вывести слова строки  
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
06.12.2011, 11:52     Вывести слова строки #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Nevado4ka, сказали же с нуля.
C++
1
for (int j = 0; j < 5; ++j)
И вообще логика измениться должна:
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 <iostream>
 
using namespace std;
 
int main() 
{
   char s[100] = " Every . solution , breeds ! new ? problems / ";
   char simb[10] = " .,!?/";
 
   bool endline = true; 
   for (int i = 0; s[i]; ++i)
   {  
           bool found = false;  
           for (int j = 0; j < 6 && !found; j++)
           {
              if (s[i] == simb[j])
                 found = true;
           }
           
           if (!found) 
           {
                   cout << s[i];
                   endline = true;
           }
           else if (endline)
           {
                   cout << endl;
                   endline = false;
           }
   }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 12:34     Вывести слова строки
Еще ссылки по теме:

Строки. Вывести совпадающие в текстах слова C++
C++ Как вывести разбитые слова из строки по алфавиту?
Вывести слова строки в алфавитном порядке C++

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

Или воспользуйтесь поиском по форуму:
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
06.12.2011, 12:34     Вывести слова строки #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
stringstream
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <sstream>
 
const std::string delims = " .,!?/";
 
int main()
{
    std::string Str = " Every . solution , breeds ! new ? problems / ";
    std::istringstream ist(Str);
    while(ist>>Str)
        if(Str.find_first_of(delims) == std::string::npos)
            std::cout<<Str<<std::endl;
    system("pause");
    return 0;
}
Yandex
Объявления
06.12.2011, 12:34     Вывести слова строки
Ответ Создать тему
Опции темы

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