Нужна помощь по работе со строками символов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Кристина97
Сообщения: 1
Зарегистрирован: 04 дек 2016, 00:53

04 дек 2016, 00:59

Ошибка в 3ем задании: Заменить каждое вхождение в строку символов указанного пользователем слова на другое слово. Выводит только первое слово почему-то. Спасибо заранее

Ошибка где-то тут:

Код: Выделить всё

case '3' :  printf("Vvedite zameniaemoe slovo\n");
                        gets(zamen);
                        printf("Vvedite vstavliaemoe slovo\n");
                        gets(vstavl);
                        p=strtok(s," ");
                        b=0;
                        while(p!=NULL)
                        {
                            b++;
                            strcpy(mas[b],p);
                            p=strtok(NULL," ");
                        }
                        for (i=0;i<b;i++)
                        if (strcmp(mas[i],zamen)==0)
                        {
                            strcpy(mas[i],vstavl);
                        }
                            printf("%s",mas);
                        break;
А весь код:

Код: Выделить всё

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
 
 
void main(void)
{
    char a,s[255], pod[255],*p,zamen[100],vstavl[100],mas[100][100];
    int n,i,b;
    printf("Vvedite text\n");
    gets(s);
 
    while(1)
    {
        printf("\nWiberite punkt menu ");
        printf("\n1.Perevesti vse simvoli vvedennoi stroki v niszniy registr.");
        printf("\n2.Podschitat kolichestvo vhoszdeniy podstroki v stroku.");
        printf("\n3.Zamenit' kazhdoe vhoschdenie v stroku simvolov ukazannogo polzowatelem slova na drugoe slovo.\n");
        printf("\nDlia vihoda naschmite ESC.\n");
        a=getch();
 
            switch(a)
            {
                case '1' :  strlwr(s);
                        printf("\nRezultat: %s",s);
                        getch();
                        break;
 
                case '2' :  i=0;
                        printf("Vvedite podstroku: ");
                        scanf("%s",pod);
                        p=s;
                        while(p)
                        {
                            if(p=strstr(p,pod))
                            {
                                i++;
                                p++;
                            }
                        }
                        printf("\nKolichestvo vhozdeniy: %d",i);
                        getch ();
                        break;
 
                case '3' :  printf("Vvedite zameniaemoe slovo\n");
                        gets(zamen);
                        printf("Vvedite vstavliaemoe slovo\n");
                        gets(vstavl);
                        p=strtok(s," ");
                        b=0;
                        while(p!=NULL)
                        {
                            b++;
                            strcpy(mas[b],p);
                            p=strtok(NULL," ");
                        }
                        for (i=0;i<b;i++)
                        if (strcmp(mas[i],zamen)==0)
                        {
                            strcpy(mas[i],vstavl);
                        }
                            printf("%s",mas);
                        break;
                case 27:
                        exit(1);
                default:
                        printf("Takogo punkta net");
                        getch();
            }
 
    }
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

04 дек 2016, 01:40

Функция printf выводит символы от переданного адреса до первого символа с кодом 0. Таким образом вывод первой строки вполне ожидаем, если в качестве параметра мы передадим mas (который является массивом массивов). Для того, чтобы увидеть все строки, следует сделать цикл по i, в котором будет выводится mas.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
ВладимирФ
Сообщения: 2
Зарегистрирован: 05 дек 2016, 12:09

05 дек 2016, 12:14

Ты тупой ? сам решить не мог ?????
Ответить