Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложение строк 
V
    Опции темы
Tema1
Дата 26.3.2013, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2013

Репутация: нет
Всего: нет



Здравствуйте, пишу программу в которой вводиться предложение, выбирается номер слова и количество слов, вывести должна предложение сначала где идут слова без выбранной "кучи" слов, а в конце сама выбранная "куча" слов. 
Пример: Миша пошел купить хлеб в магазин.
С 2 слова, 3 слова - получается - Миша в магазин пошел купить хлеб.
Проблема в том что почему то не могу сложить стринги, не знаю почему
Код


    CString str;
    CString str3;
    CString str4;
    CEdit * pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
    CEdit * pEdit3 = (CEdit*)GetDlgItem(IDC_EDIT3);  // С какого слова начать выбор
    CEdit * pEdit4 = (CEdit*)GetDlgItem(IDC_EDIT4);  // Сколько слов
    CEdit * pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2);  //  вывод
    pEdit1->GetWindowText(str);
    pEdit3->GetWindowText(str3);
    pEdit4->GetWindowText(str4);

    CString array[50];
    CString StrEnd;
    CString StrEnd1;
    int shet = 0;
    char *ch = new char[str.GetLength()+1];
    strcpy(ch,str);
    for(int j = 1; j < 15; j++){          
     for(int i = shet; i < (str.GetLength()+1); i++){
        ///////// 1 var
         if(ch[i] == ' ') {
             ch[i] = '.';                      
             break;
         } 
            array[j] = array[j] + ch[i];        // кол слов в массиве
            shet = shet + 1;
     }
    }

    for(int g = 1; g < shet; g++){
        if( g < atoi(str3)) StrEnd = StrEnd + array[g];
            if (g > (atoi(str3) + atoi(str4) - 1) ) 
            StrEnd = StrEnd + array[g];
    }
    
    for(int n = atoi(str3); n < (atoi(str3) + atoi(str4) ); n++){
         StrEnd1 = StrEnd1 + array[n];
         
    }


    CString d;                                                                                       // тут даже сделал спец переменную в которую заношу все 2-ва стринга
    d = StrEnd + StrEnd1;                                                                    //выводит только StrEnd
    pEdit2 -> SetWindowText(d);
    delete []ch;


проверял, работает все верно, и StrEnd выводит нормально и StrEnd1 (про точки которые еще добавляются - это спец для продолжение проги), но полностью не выводит, в результате их сложение выводит только StrEnd.
Почему так происходит и как исправить? 
PM MAIL   Вверх
volatile
Дата 27.3.2013, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 4
Всего: 85



Короче,  ваш вопрос:
Цитата(Tema1 @  26.3.2013,  21:15 Найти цитируемый пост)
 и StrEnd выводит нормально и StrEnd1 

Цитата(Tema1 @  26.3.2013,  21:15 Найти цитируемый пост)
  d = StrEnd + StrEnd1;  //выводит только StrEnd
    pEdit2 -> SetWindowText(d);

Видимо, там либо перевод строки в конце StrEnd, и он у вас 
переносит на вторую строку, которую вы не видите,
либо может вообще '\0'

PM MAIL   Вверх
Albor
Дата 27.3.2013, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(Tema1 @  26.3.2013,  20:15 Найти цитируемый пост)
 
Код

int shet = 0;
    char *ch = new char[str.GetLength()+1];
    strcpy(ch,str);
    for(int j = 1; j < 15; j++){          
     for(int i = shet; i < (str.GetLength()+1); i++){
        ///////// 1 var
         if(ch[i] == ' ') {
             ch[i] = '.';                      
             break;
         } 
            array[j] = array[j] + ch[i];        // кол слов в массиве
            shet = shet + 1;
     }

    }


Tema1, посмотрите в MSDN возможности класса CString и используйте их. Вы делаете много лишнего, совершая дополнительные ошибки. Цитированный код можно выполнить одной строкой:
Код

shet=str.Replace(' ','.');// заменит пробелы точками и вернёт количество замен.

И рассмотрите случай, если вдруг в тексте окажется подряд несколько пробелов - вы получите "лишние слова". А если в конце строки нет пробела, то получите на одно слово меньше и т.д. 

Это сообщение отредактировал(а) Albor - 27.3.2013, 08:18
PM MAIL ICQ   Вверх
Tema1
Дата 27.3.2013, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2013

Репутация: нет
Всего: нет



Да спасибо volatile, не подумал я про '\0' , вот так работает 
Код

        CString d;
    d = StrEnd - '\0' + StrEnd1;
    pEdit2 -> SetWindowText(d);


Да все ошибки и нюансы я проработаю Albor, хотя вот про "лишние слова" я сначала не подумал, Спасибо всем))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.