сложение строк

 
0
 
C++
ava
Tema1 | 26.03.2013, 22:15
Здравствуйте, пишу программу в которой вводиться предложение, выбирается номер слова и количество слов, вывести должна предложение сначала где идут слова без выбранной "кучи" слов, а в конце сама выбранная "куча" слов.
Пример: Миша пошел купить хлеб в магазин.
С 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.
Почему так происходит и как исправить? 
Comments (3)
ava
volatile | 27.03.2013, 00:01 #
Короче,  ваш вопрос:
Цитата (Tema1 @  26.3.2013,  21:15 findReferencedText)
 и StrEnd выводит нормально и StrEnd1 

Цитата (Tema1 @  26.3.2013,  21:15 findReferencedText)
  d = StrEnd + StrEnd1;  //выводит только StrEnd
  pEdit2 -> SetWindowText(d);

Видимо, там либо перевод строки в конце StrEnd, и он у вас
переносит на вторую строку, которую вы не видите,
либо может вообще '\0'
ava
Albor | 27.03.2013, 08:15 #
Цитата (Tema1 @  26.3.2013,  20:15 findReferencedText)
 


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 и используйте их. Вы делаете много лишнего, совершая дополнительные ошибки. Цитированный код можно выполнить одной строкой:

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

И рассмотрите случай, если вдруг в тексте окажется подряд несколько пробелов - вы получите "лишние слова". А если в конце строки нет пробела, то получите на одно слово меньше и т.д. 
ava
Tema1 | 27.03.2013, 09:31 #
Да спасибо volatile, не подумал я про '\0' , вот так работает

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


Да все ошибки и нюансы я проработаю Albor, хотя вот про "лишние слова" я сначала не подумал, Спасибо всем))
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Albor   volatile   Tema1
advanced
Submit