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

Как работают циклы? - C++

Восстановить пароль Регистрация
 
Siebent
 Аватар для Siebent
16 / 2 / 1
Регистрация: 21.11.2012
Сообщений: 39
22.11.2012, 07:01     Как работают циклы? #1
Мне нужно написать программу, выполняющую следующие действия:
1. Ввести две строки текста с подсказками при вводе;
2. Определить и вывести на экран длины строк (без конечного нулевого байта); использовать оператор while;
3. Объединить две строки в одну, удалив все пробелы; использовать оператор for.
4. Выполнить обработку строки - Заменить все пары букв «XY» на цифры «12».. Обработку прекратить, если количество изменений будет больше четырех. Использовать оператор do while;
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
31
32
33
34
35
36
37
38
39
40
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#pragma argsused
int main(int argc, char* argv[])
{
 
char str1[80], str2[80], str3[160];
    int i, j, count;
 
/vvod strok/
    printf("Enter first string:\t");
    gets(str1);
 
    printf("Enter second string:\t");
    gets(str2);
 
/*podchet dliny*/
    i=0;
    while(str1[i++]!='\0');
    printf("First string length is:\t%d chars\n",i-1);
 
    j=0;
    while(str2[j++]!='\0');
    printf("Second string length is:\t%d chars\n",j-1);
 
/*soedinenie strok*/
 
//не могу понять как правильно соединить строки...
       for(i=0;str1[i]!='\n'; i++) str3[i]=str1[i];
       for(j=0;str2[j]!='\n'; j++) {str3[i]=str2[j]; i++;}
 
 
    puts(str3);
 
 
 
       system("pause");
        return 0;
}
Добавлено через 12 часов 2 минуты
Вот до чего дошел:
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
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#pragma argsused
int main(int argc, char* argv[])
{
    char str1[80], str2[80], str3[160];
    int i, j, count;
 
/*ввод строк*/
    printf("Enter first string:\t");
    gets(str1);
 
    printf("Enter second string:\t");
    gets(str2);
 
/*подсчет длины*/
    i=0;
    while(str1[i++]!='\0');
    printf("First string length is:\t%d chars\n",i-1);
 
    j=0;
    while(str2[j++]!='\0');
    printf("Second string length is:\t%d chars\n",j-1);
 
/*соединение строк*/
       j=0;
       for (i=0; str1[i]!=' '; i++) {str3[j]=str1[i];  j++;}
       for (i=0; str2[i]!=' '; i++) {str3[j]=str2[i];  j++;}
       printf("First string plus second string are:\t");
       puts(str3);
/*замена "XY"на "12"*/
        j=0;
        do
       { if (str3[j]=='X' && str3[j++]=='Y')  {str3[j]=='1'; str3[j++]=='2';}
       j++;}
 
         while  (str3[j]!='\n')
            ;
            printf("cifra:\t");
       puts(str3);
       system("pause");
        return 0;
}
Но соединение строк все равно не корректо работает, а так же не заменяет символы на цыфры. Может кто подсказать как поправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
22.11.2012, 07:32     Как работают циклы? #2
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
#include <stdio.h> 
int main(){
    char str1[1024]={0};
    char str2[1024]={0};
    //Ввод строк
    printf("Enter first string: -> ");
    gets(str1);
    printf("Enter second string: -> ");
    gets(str2);
    //Определения длин строк с помощью while
    int len=0;
    while(*(str1+len)) ++len;
    printf("First string length: %d\n",len);
    len=0;
    while(*(str2+len)) ++len;
    printf("First string length: %d\n",len);
    //Объединение строк и удаление пробелов
    char * pStr2;
    char * pStr;
    for(pStr2=str1, pStr=str1;*pStr=*pStr2;++pStr2)
        if(*pStr2!=' ')
            ++pStr;
    for(pStr2=str2;*pStr=*pStr2;++pStr2)
        if(*pStr2!=' ')
            ++pStr;
    printf("Add rezult: %s\n",str1);
    //Замена XY на 12
    pStr=str1;
    int count=0;
    while(*pStr && count<4){
        if(*(pStr)=='X' && *(pStr+1)=='Y'){
            *pStr='1'; *(pStr+1)='2';
            pStr+=2; ++count;
        }else{
            ++pStr;
        }
    }
    printf("Replace rezult: %s\n",str1);
   return 0;
}
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
22.11.2012, 07:39     Как работают циклы? #3
Объединение строк:
C++
1
2
       for (i=0; str1[i]!=' '; i++) {str3[j]=str1[i];  j++;}
       for (i=0; str2[i]!=' '; i++) {str3[j]=str2[i];  j++;}
Как по вашему цикл for должен узнать что наступил конец строки и прекратить? Здесь нужно сделать дополнительную проверку на конец строки(можно сделать проверку на конец строки в теле цикла, а внутри отдельно проверку на пробелы). Тогда должно работать.


Замена "XY"на "12":
Рассмотрим слудующую строку:
C++
1
if (str3[j]=='X' && str3[j++]=='Y')  {str3[j]=='1'; str3[j++]=='2';}
1) Здесь вы используете j++ он преждевременно увеличивает в цикле значения, в связи с чем проверка несовсем корректна. Лучше использовать j+1 (if (str3[j]=='X' && str3[j++]=='Y') {str3[j]=='1'; str3[j++]=='2';})

2) Помимого этого, при выполнении условия вы выполняете оператор сравнения ==, который соответственно ничего не присваивает реальному элементу в массиве. Поэтому нужно использовать обычное "=". Более правильный код:

C++
1
if (str3[j]=='X' && str3[j+1]=='Y')  {str3[j]='1'; str3[j+1]='2';}
Siebent
 Аватар для Siebent
16 / 2 / 1
Регистрация: 21.11.2012
Сообщений: 39
22.11.2012, 07:56  [ТС]     Как работают циклы? #4
Огромное спасибо, Croessmah. В BORLAND C++ BUILDER запустить Ваш код не удалось, вечером попробую в Visual Studio понять алгоритм работы.

Добавлено через 2 минуты
TrueBit, спасибо за "наводку". Постараюсь доработать свой вариант решения.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
22.11.2012, 07:56     Как работают циклы? #5
Цитата Сообщение от Siebent Посмотреть сообщение
В BORLAND C++ BUILDER запустить Ваш код не удалось
Что написал?

VS и GCC - скомпилировали без проблем.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 08:19     Как работают циклы? #6
Цитата Сообщение от Siebent Посмотреть сообщение
/vvod strok/
что делишь первым слешем? На что делишь вторым? Пробелы в идентификаторах не допустимы, а если это произведение, то умножение нельзя подразумевать.

Добавлено через 1 минуту
Цитата Сообщение от Siebent Посмотреть сообщение
while(str1[i++]!='\0');
Пока str1[i] не равен 0, i увеличивается на 1, больше не делается ничего.

Добавлено через 1 минуту
Цитата Сообщение от Siebent Посмотреть сообщение
//не могу понять как правильно соединить строки...
Конкатенировать, конечно.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
for (count=0; count<i; ++count)
{
 str3[count]=str1[count];
}
for (count=0; count<=j; ++count)
{
 str3[count+i]=str1[count];
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
22.11.2012, 08:22     Как работают циклы? #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Пока str1[i] не равен 0, i увеличивается на 1, больше не делается ничего.
Немного поправлю - тут собственно определяется длина строки, далее вывод i-1
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2012, 08:25     Как работают циклы? #8
Это уже интерпретация из условия, что массив хранит строку, а строка заканчивается терминальным нолём.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 08:59     Как работают циклы?
Еще ссылки по теме:

C++ как работают эти 4 функции
C++ ifstream: как работают операторы << и >>?
C++ Как работают ссылки

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

Или воспользуйтесь поиском по форуму:
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
22.11.2012, 08:59     Как работают циклы? #9
Цитата Сообщение от taras atavin Посмотреть сообщение
...
C++
1
2
3
4
5
6
7
8
for (count=0; count<i; ++count)
{
 str3[count]=str1[count];
}
for (count=0; count<=j; ++count)
{
 str3[count+i]=str1[count];
}
Такой код объеденит 2 строки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int str3_count=0; //счестчик для строки str3
for (count=0; count<i; ++count)
{
   if(!(str1[count]==' ')) { //если непробел
      str3[str3_count]=str1[count]; str3_count++;
   }
}
for (count=0; count<=j; ++count)
{
   if(!(str2[count]==' ')) { //если непробел
      str3[str3_count]=str2[count];  str3_count++;
   }
}
str3[str3_count]='\0'; //завершаем строку str3 нулем;
Пропуск пробелов в соответствии с заданием.
Yandex
Объявления
22.11.2012, 08:59     Как работают циклы?
Ответ Создать тему
Опции темы

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