VET@Lb Опубликовано 10 февраля, 2007 Жалоба Поделиться Опубликовано 10 февраля, 2007 Мне нужна помощ по написанию программ на С. Задание: Написать программы, которые без использования стандартных функций манипуляции со строками выполняют следующие действия: 1. Сравнение двух строк, введенных пользователем. 2. Присоединение одной строки к другой (строки ввести с клавиатуры). 3. Подсчет числа символов в строке (без учета нулевого символа). 4. Подсчет количества слов в строке. 5. Удаление из строки лишних пробелов между словами. 6. Проверку, является ли строка палиндромом (палиндром – фраза, которая слева направо и справа налево читается одинаково без учета пробелов – «А роза упала на лапу Азора»). помогите кому не тяжело, только желательно использовать библиотеку string.h а размер памяти выделять таким способом name=(char*)malloc(sizeof(char)*10); Только без разных наворотов главное чтобы прога работала. Помогите пожалуйста. Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 13 февраля, 2007 Жалоба Поделиться Опубликовано 13 февраля, 2007 Я с C++ могу посоветовать только алгоритм, если у тебя строка идет как масив типа char то тут проблем нету вообще. Сначала делаеш цыкл с пред условием и выполняеш его до тех пор пока массив существует. так ты получиш длину строки. Сравнение дву строк тебе прийдеться каждые элементы сроки сравнивать между собой присоединение дной строки к другой тебе прийдеться увеличить длину масива на столько символов сколько длина новой строки или в крайнем случае создать новый масив уже с известной длиноесли тее надо дописать в конец первой строки нову то просто сначала в массив записываеш первую строку потом вторую, если нужно дописать гдето в средине то сначала прийдеться найти ту часть которая будет писаться первой потом и записать её в новый массив поом записатьвторую строку и дописать остатки первой строки. 4 и 5 ты проверяеш каждый элемент строки на то являеться ли он пробелом к примеру if(str=="") пример написан на C# в С++ тольько синтаксис изменить в случае 4 ты просто делаеш переменную ипа счетчика и увеличиваеш её в случае нахождения пробела (в конце прийдеться добавить 1 так как число пробелов это числп слов -1), в слечае 5 прийдеться дописывать в новый масси эти слова Насчет проверки на то являеться ли строка палиндромом тебе надо сравнивать первый и последний символы между собой и если потом второй и предпследний.... в случае если хоть одна из свяязок окажеться неверной можеш прекращять поиск это уже не полендром.желаю удачи в перевод на С++ )))))). Ссылка на комментарий Поделиться на другие сайты Поделиться
VET@Lb Опубликовано 13 февраля, 2007 Автор Жалоба Поделиться Опубликовано 13 февраля, 2007 Спасибо за помощ я уже разобрался чуть. Правда не все сделал но вроде все как понятно. Вот вторая. #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"); } } чето кривая, или не равны тупо, или равны разници нет что вводишь вроде все правильно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 13 февраля, 2007 Жалоба Поделиться Опубликовано 13 февраля, 2007 VET@Lb: "Что есть истина?" (Понтий Пилат) Неправильно проверяется истинность равенства строк, замени if (s>0) на if (s==0) Ссылка на комментарий Поделиться на другие сайты Поделиться
VET@Lb Опубликовано 13 февраля, 2007 Автор Жалоба Поделиться Опубликовано 13 февраля, 2007 ДА ТОЧНО РАБОТАЕТ. Как я мог так тормознуть. Все пробывал а об этом не подумал. Ссылка на комментарий Поделиться на другие сайты Поделиться
VET@Lb Опубликовано 14 февраля, 2007 Автор Жалоба Поделиться Опубликовано 14 февраля, 2007 Неправильно проверяется истинность равенства строк, замени if (s>0) на if (s==0) программа работает но мне непонятно по какому принципу оно проверяет. значение s принимает значение или числовое или когда строки равны ноль. почему так, а не когда истина единица , ложь ноль? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 февраля, 2007 Жалоба Поделиться Опубликовано 14 февраля, 2007 VET@Lb: или числовое или когда строки равны нольНоль тоже числовое значение. почему так, а не когда истина единица , ложь ноль? Бери "Библию программиста на C" - Б. Керниган, Д. Ритчи, Язык программирования Си. Там написано: ...функции, подобные isdigit, в качестве истины могут выдавать любое ненулевое значение. В местах проверок внутри if, while, for и пр. "истина” просто означает "не нуль”. Почему "истина" часто означает -1, а не 1 (хотя может быть и любым ненулевым значением), идет из истории языка C. Коротко говоря, так машинный код получается экономичнее. Компьютеры используют для внутреннего представления целых чисел не их обычную, даже двоичную, запись со знаком, а так называемый дополнительный код. В нем логические операции с кодом числа -1 проще, чем с кодом числа 1. Поэтому чаще использовалось для обозначения "истины" значение -1, а не 1. Ссылка на комментарий Поделиться на другие сайты Поделиться
VET@Lb Опубликовано 14 февраля, 2007 Автор Жалоба Поделиться Опубликовано 14 февраля, 2007 Может кому пригодится: Первое: #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"); } Все пошел я их защищать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти