Перейти к содержанию
СофтФорум - всё о компьютерах и не только

C++ помогите решить


Рекомендуемые сообщения

Мне нужна помощ по написанию программ на С.

Задание:

Написать программы, которые без использования стандартных функций манипуляции со строками выполняют следующие действия:

1. Сравнение двух строк, введенных пользователем.

2. Присоединение одной строки к другой (строки ввести с клавиатуры).

3. Подсчет числа символов в строке (без учета нулевого символа).

4. Подсчет количества слов в строке.

5. Удаление из строки лишних пробелов между словами.

6. Проверку, является ли строка палиндромом (палиндром – фраза, которая слева направо и справа налево читается одинаково без учета пробелов – «А роза упала на лапу Азора»).

помогите кому не тяжело, только желательно использовать библиотеку string.h а размер памяти выделять таким способом name=(char*)malloc(sizeof(char)*10); Только без разных наворотов главное чтобы прога работала. Помогите пожалуйста.

Ссылка на комментарий
Поделиться на другие сайты

Я с C++ могу посоветовать только алгоритм, если у тебя строка идет как масив типа char то тут проблем нету вообще. Сначала делаеш цыкл с пред условием и выполняеш его до тех пор пока массив существует. так ты получиш длину строки.

Сравнение дву строк тебе прийдеться каждые элементы сроки сравнивать между собой

присоединение дной строки к другой тебе прийдеться увеличить длину масива на столько символов сколько длина новой строки или в крайнем случае создать новый масив уже с известной длиноесли тее надо дописать в конец первой строки нову то просто сначала в массив записываеш первую строку потом вторую, если нужно дописать гдето в средине то сначала прийдеться найти ту часть которая будет писаться первой потом и записать её в новый массив поом записатьвторую строку и дописать остатки первой строки.

4 и 5 ты проверяеш каждый элемент строки на то являеться ли он пробелом к примеру if(str=="") пример написан на C# в С++ тольько синтаксис изменить в случае 4 ты просто делаеш переменную ипа счетчика и увеличиваеш её в случае нахождения пробела (в конце прийдеться добавить 1 так как число пробелов это числп слов -1), в слечае 5 прийдеться дописывать в новый масси эти слова

Насчет проверки на то являеться ли строка палиндромом тебе надо сравнивать первый и последний символы между собой и если потом второй и предпследний.... в случае если хоть одна из свяязок окажеться неверной можеш прекращять поиск это уже не полендром.желаю удачи в перевод на С++ )))))).

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за помощ я уже разобрался чуть. Правда не все сделал но вроде все как понятно.

Вот вторая.

#include<string.h>

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

void main()

{

clrscr();

char *text=(char*)malloc(sizeof(char)*100);

char *text2=(char*)malloc(sizeof(char)*100);

gets(text2);

char *text3=(char*)malloc(sizeof(char)*100);

gets(text3);

strcpy(text, text2);

strcat(text, text3);

puts(text);

}

В этой непойму где ошибка

#include<string.h>

#include<stdio.h>

#include<conio.h>

#include<alloc.h>

void main()

{

clrscr();

int s;

char *text=(char*)malloc(sizeof(char)*12);

gets(text);

char *text2=(char*)malloc(sizeof(char)*12);

gets(text2);

s=strcmp(text,text2);

if (s>0)

{

printf("oni ravnu");

}

else

{

printf("nerovnu");

}

}

чето кривая, или не равны тупо, или равны разници нет что вводишь вроде все правильно.

Ссылка на комментарий
Поделиться на другие сайты

VET@Lb:

"Что есть истина?" (Понтий Пилат) :bye1:

Неправильно проверяется истинность равенства строк, замени if (s>0) на if (s==0)

Ссылка на комментарий
Поделиться на другие сайты

Неправильно проверяется истинность равенства строк, замени if (s>0) на if (s==0)

программа работает но мне непонятно по какому принципу оно проверяет.

значение s принимает значение или числовое или когда строки равны ноль.

почему так, а не когда истина единица , ложь ноль?

Ссылка на комментарий
Поделиться на другие сайты

VET@Lb:

или числовое или когда строки равны ноль
Ноль тоже числовое значение.
почему так, а не когда истина единица , ложь ноль?
Бери "Библию программиста на C" - Б. Керниган, Д. Ритчи, Язык программирования Си. Там написано:
...функции, подобные isdigit, в качестве истины могут выдавать любое ненулевое значение. В местах проверок внутри if, while, for и пр. "истина” просто означает "не нуль”.
Почему "истина" часто означает -1, а не 1 (хотя может быть и любым ненулевым значением), идет из истории языка C. Коротко говоря, так машинный код получается экономичнее. Компьютеры используют для внутреннего представления целых чисел не их обычную, даже двоичную, запись со знаком, а так называемый дополнительный код. В нем логические операции с кодом числа -1 проще, чем с кодом числа 1. Поэтому чаще использовалось для обозначения "истины" значение -1, а не 1.
Ссылка на комментарий
Поделиться на другие сайты

Может кому пригодится:

Первое:

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main()

{

clrscr();

int a,s=0;

char str[100],str1[100];

printf(" ");

gets(str);

printf(" ");

gets(str1);

if(strlen(str)==strlen(str1))

{

for(a=0;str[a]!=str1[a];a++) s=1;

if (s==1)

printf("\n ne verno");

else

printf("\n Pravilno");

}

else

printf("\n owuBkA");

}

Второе:

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<alloc.h>

void main()

{

clrscr();

int i,j;

char str1[100], str2[100], str[100];

printf("");

gets(str1);

printf("");

gets(str2);

for(i=0;(str1!='\0');i++)

str=str1;

for(j=0;(str2[j]!='\0');j++)

{

str=str2[j];i++;

}

puts(str);

}

Третье:

#include<stdio.h>

#include<conio.h>

void main()

{

clrscr();

int i,j;

char str1[100];

printf("");

gets(str1);

for(i=0;(str1!='\0');i++);

printf("%d",i);

}

Четвертое:

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main()

{

clrscr();

int i,c=1;

char str1[100];

printf("");

gets(str1);

for(i=0;i<=strlen(str1);i++)

{ if(str1==' ')

c++;

else;

}

printf("%d",c);

}

Пятое:

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<alloc.h>

void main()

{

clrscr();

int i,j=0;

char str[100], str1[100];

printf("");

gets(str);

for(i=0;i<100;i++)

{

if(str!=' ')

{str1[j]=str;j++;}

else;

}

puts(str1);

}

Шестое:

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main()

{

clrscr();

int a,s,k;

char str[100],str1[100];

printf(" ");

gets(str);

k=strlen(str);

for(a=0;(a<100)&&(k>=0);a++)

{

if (str[a]==str[k])

{

k=k-1;s=1;

}

else

s=0;

}

if(s==1) printf("polindrom");

else printf("ne polindrom");

}

Все пошел я их защищать.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...