Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2020, 20:10   #1
CtrlCCtrlV
Новичок
Джуниор
 
Регистрация: 30.01.2020
Сообщений: 1
По умолчанию Склейка слов. Программа выводит невидимый NULL (C)

Здравствуйте. По заданию надо написать программу, которая склеивала бы пары слов в новое слово так, чтобы чтобы окончание первого совпадало с началом второго, например, qwerty + y123 = qwerty123. Это слово надо вывести в стандартный поток вывода. Если слова возможно соединить несколькими способами, надо выбрать тот, который обеспечивает максимальную общую часть (123+12345=12345)
При написании столкнулась со следующей проблемой: программа выводит в конце строки, помимо нового слова (qwerty123), еще и NULL (qwerty123NULL), который я не могу отследить (не вижу его при отладке, но преподаватель говорит, что он там есть)
Как исправить эту проблему и избавиться от NULL в строке?
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main()
{
    int N; //сколько строк склеиваем
    scanf_s("%d\n", &N);
 
    int step=0;
    for (int i = 0; i < N; i++)
    {
        char base[100] = { 0 };// исходная строка
        char res[100] = { 0 }; //результат склейки
        
        int j = 0, m = 0;
        int w1 = 0, w2 = 0;//длины слов
 
        fflush(stdin);
        
        fgets(base, 100, stdin);
        
 
        int sl = strlen(base);//длина строки
 
        while ((w1 < sl) && (base[w1] != ' '))
        {
            res[w1] = base[w1];//копируем первое слово во второй массив 
            w1++;//длина первого слова
        }
 
        w2 = sl - w1 - 1;//длина второго слова: длина строки-длина первого слова-пробел
        int d; //начиная с какого символа будем проверять совпадения
        if (w1 >= w2)
            d = w1 - w2;
        else if (w2 >= w1)
            d = 0;
    
        for (int k=d; k< (w1 + 1); k++)
        {
            step = 0;
            while (base[k + step] == base[w1+1+step])
                step++;
            if (base[k + step] == ' ')
                break;
        }
 
        int c = w1+w2-step;//длина итогового слова
        for (int n=w1; n<c; n++)
        {
            res[n] = base[n+1+step];
        }
        res[c] =  '\0' ;
 
        int rl = strlen(res);
        for (j; (j <rl); j++)
            printf("%c", res[j]);
 
    }
    return 0;
}

Последний раз редактировалось CtrlCCtrlV; 30.01.2020 в 23:27.
CtrlCCtrlV вне форума Ответить с цитированием
Старый 31.01.2020, 10:30   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

где условие
Код:
 && (base[w1] != ' '))
добавь ещё одно условие
Код:
 or (base[w1] !=char (0)))
, типа если не равно пробелу и нулевой строке.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 31.01.2020 в 10:33.
NetSpace вне форума Ответить с цитированием
Старый 01.02.2020, 10:36   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 964
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
char (0)
'\0' - таки нулевой символ, а не нулевая строка
Алексей1153 вне форума Ответить с цитированием
Старый 02.02.2020, 21:34   #4
niore
Новичок
Джуниор
 
Регистрация: 02.02.2020
Сообщений: 3
По умолчанию

Попробуйте заменить
Код:
int rl = strlen(res);
        for (j; (j <rl); j++)
            printf("%c", res[j]);
на
Код:
printf("%s", res);
В случае если у вас действительно в результирующей строке есть NULL по мимо
Код:
res[c] =  '\0' ;
Строка будет выведена не полностью.
niore вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа в Си: Дана строка-последовательность слов, Есть ли гласная (согласная), входящая в состав всех слов? timpuk Помощь студентам 0 10.01.2014 23:12
помогите сделать - программа выводит текст на экран, определяет количество предложений и количество слов (язык С) карен1 Фриланс 4 26.12.2013 21:35
Выводит 'null' в место заданного имя pompiduskus JavaScript, Ajax 4 27.09.2012 16:38
SQL запрос. Не выводит строки, где в одном поле присутствует NULL, хотя идет проверка lyle_200490 SQL, базы данных 7 07.04.2011 22:41
программа, которая выводит на экран одно из данных слов vados Паскаль, Turbo Pascal, PascalABC.NET 11 26.10.2007 23:47