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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
tania.
1 / 1 / 0
Регистрация: 28.12.2009
Сообщений: 53
#1

Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове - C++

08.07.2010, 12:43. Просмотров 1184. Ответов 7
Метки нет (Все метки)

подскажите в чем ошибка
задание:Преобразовать строку таким образом, чтобы цифры каждого слова
были перенесены в начало слова без изменения порядка следования
их в слове


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
#include <iostream>
#include <string>
 
using namespace std;
void preobr(string s)
{ int j=0, k;
    int i=0;
    string v;
   k=0;
   while(s[i]!='\0')
   {
 
     while (s[i]!=' '&&s[i]!='\0')
       if(s[i]>='0'&&s[i]<='9')
          {v[j]=s[i];
          cout<<v[j];
          j++;}
       i=k;
       while(s[i]!=' '&&s[i]!='\0')
         {
 
          if(s[i]<'0'&&s[i]>'9')
              {v[j]=s[i];
              j++;}
          i++;
         }
    if (s[i]==' ') v[j]=' '; else v[j]='\0';
    k=i+1;
    j++;
   }
   cout<<v;
   s=v;
}
int main()
{   int i;
    string s;
   getline(cin,s);
   preobr(s);
  cout << s << endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2010, 12:43     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове
Посмотрите здесь:

C++ С клавиатуры вводится многострочный текст. Распечатать слова из текста, преобразовав их следующим образом: · перенести последнюю букву в начало слова;
Обработать строку так, чтобы чтобы в ней остались только те слова которые содержат буквы и цифры C++
C++ Преобразовать матрицу А(mxn) таким образом чтобы строки с нечетным индексом были упорядочены по убыванию, а четные по возрастанию.
Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно. C++
C++ Преобразовать строку так, чтобы буквы каждого слова были остортированы по возрастанию
Преобразовать строку, чтобы в ее начале были записаны слова, содержащие только цифры C++
Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
08.07.2010, 22:35     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #2
tania., как-то хитро у Вас всё и запутанно... Вот Вам работающая програмка
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
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
 
std::string & function(std::string & s){
    std::ostringstream digits, nedigits;
    for ( std::string::iterator i = s.begin(); i != s.end(); ++i ){
        if ( isdigit(*i) )
            digits << *i;
        else
            nedigits << *i;
    }
    s = digits.str() + nedigits.str();
    return s;
}
 
int main(){
    std::string buf;
    
    std::cout << "String: ";
    std::getline(std::cin, buf);
    std::cout << "Result: " << function(buf) << std::endl;
    
    return 0;
}
PS Поймите только правильно - это на самом деле очень хорошо, что Вы пытаетесь её самостоятельно решить, но вот так проще. Если что-то не понятно - спрашивайте... Или обязательны такие заморочки с кучей циклов, проверок и прочего?
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
09.07.2010, 12:28     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #3
easybudda часто сталкивался с такой ситуацией:
Если мы рассмотрим такой пример, то все будет отлично:
String: forum123
Result: 123forum
Но если
форум123
то функция
isdigit(*i)
ломается на проверке русских букв.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
09.07.2010, 14:00     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #4
dxdy, да ну?!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
/* Читает строку, печатает только цифры */
int main(void){
    char buf[BUFSIZ], * p;
    printf("String: ");
    if ( ! fgets(buf, BUFSIZ, stdin) )
        exit(EXIT_FAILURE);
    for ( p = buf; *p; ++p )
        if ( isdigit(*p) )
            printf("%c", *p);
    printf("\n");
 
    exit(EXIT_SUCCESS);
}
проверил в трёх разных системах - MacOS X, FreeBSD, Windows. При совершенно разных кодировках работало абсолютно одинаково как с русскими буквами, так и с нерусскими... Читает строку, выводит из неё только цифры.
Даже при всей кривизне русских букв в макинтошной консоли видно, что никаких чудес не случилось...
Название: test_isdigit.png
Просмотров: 127

Размер: 7.1 Кб
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 283
09.07.2010, 15:36     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #5
easybudda, сейчас заново скомпилировал твой проект и все отлично работает на всех тестах, но сейчас работаю в Studio 2008, затем пересел на другую машину на которой была установлена Studio 2005 и выдает вот такую картину... есть вероятность, что программа VS 2005 "коряво" установлена.
Миниатюры
Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове  
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
09.07.2010, 16:28     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #6
Цитата Сообщение от dxdy Посмотреть сообщение
есть вероятность, что программа VS 2005 "коряво" установлена.
Есть вероятность, что она и написана коряво... Хотя вот компилятором командной строки от VS 2005 скомпилил, и всё нормально работает...
Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове
tania.
1 / 1 / 0
Регистрация: 28.12.2009
Сообщений: 53
15.07.2010, 18:43  [ТС]     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #7
Цитата Сообщение от easybudda Посмотреть сообщение
PS Поймите только правильно - это на самом деле очень хорошо, что Вы пытаетесь её самостоятельно решить, но вот так проще. Если что-то не понятно - спрашивайте... Или обязательны такие заморочки с кучей циклов, проверок и прочего?
не обязательно,но так зато понятнее
а то что Вы написали мне не понятно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 05:57     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове
Еще ссылки по теме:

Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию C++
Преобразовать все слова массива так, чтобы каждый символ в слове повторялся один раз, сохранив общий порядок следования символов C++
Преобразовать строку таким образом, чтобы все символы в ней были напечатаны наоборот C++
C++ Преобразовать строку таким образом, чтобы все слова в ней были напечатаны наоборот
Удалить дубликаты без изменения порядка следования элементов C++

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

Или воспользуйтесь поиском по форуму:
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.07.2010, 05:57     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове #8
Цитата Сообщение от dxdy
ломается на проверке русских букв.
её надо приводить к unsigned char
isdigit((unsigned char) *p);

Добавлено через 5 минут
видишь, на картинке она показывает, что в файле isctype.c произошло приведение к unsigned int

когда она отрицательная, она при вызове isdigit() приводится к int'у - получается отрицательное число (одни еденицы в битах), а потом, внутри, она приводит его к unsigned int - получается огромное число и она говорит, что оно не может быть больше 255
Yandex
Объявления
16.07.2010, 05:57     Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова без изменения порядка следования их в слове
Ответ Создать тему
Опции темы

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