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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2008, 23:35   #1
NamelessEndless
Ворон-мститель
Пользователь
 
Аватар для NamelessEndless
 
Регистрация: 26.05.2008
Сообщений: 24
Лампочка C++,функции,работа со стрингами

Проблема такая: прогу я написала, все работает. Преподша не принимает, аргументируя это тем, что в функции change_string есть ошибка в том, что она возвращает. Обьясните пожалуйста, в чем ошибка, и по возможности исправьте, ибо я уже ничего не пониме...

Задание: Разработать функцию, которая меняет в заданной символьной строке все слова, которые содержат указанную букву на соответствующее количество символов х . Из клавиатуры ввести несколько предложений. Используя разработанную функцию, ”спрятать“ те слова из введенных предложений, в которых встречается заданная буква.


Код:

Код:
#include <stdio.h>
#include <string.h>
#define N 25

char * change_word(char*,char);
char * change_string(char*,char);
void main(void)
{
	char rech[N][150];
	int i,j;
	char smb;

	puts("Inputing of sentences.End of inputing is NULL string.\n");
	for(i=0;i<N;i++)
	{
		printf("#%d: ",i+1);
		if(*gets(rech[i])==0)
			break;
	}
	puts("\nInputing of symbol: ");
	scanf("%c",&smb);
	for(j=0;j<i;j++)
	{
		printf("#%d: ",j+1);
		puts(change_string(rech[j],smb));
	}

	getchar();  getchar();
	return;
}

char* change_word(char* word)
{
	int j;
	for(j=0;word[j]!=0;j++)
		word[j]='x';
	return word;
}

char *change_string(char *str,char smb)
{
	char new_str[150]="";
	char *p;
	char rozd[]=" ";

	p=strtok(str,rozd);
	while(p)
	{
		if(strchr(p,smb))
			change_word(p);
		strcat(new_str,p);
		strcat(new_str," ");
		p=strtok(NULL,rozd);
	}
	new_str[strlen(new_str)-1]='.';
	return new_str;
}
Бог умер. Воскрес и мстит.
NamelessEndless вне форума Ответить с цитированием
Старый 11.11.2008, 08:41   #2
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

ну наверное придирается к тому что
Код:
new_str[strlen(new_str)-1]='.';
но по моему легче было бы сделать так
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main(void)
{
 char *s = "";
 printf("Inputing of sentences\n");
 gets(s);
 strcat(s, " ");
 char smb;
 printf("Inputing of symbol:\n");
 scanf("%c", &smb);
 int i, k, n, fl = 0;
 n = strlen(s);
 k = 0;
 for (i = 0; i < n; i++)
 {
  if (s[i] == ' ')
   {
    if (fl)
     {
      int j;
      for (j = k; j < i; j++)
       printf("x");
      fl = 0;
     }
    else
     {
      int j;
      for (j = k; j < i; j++)
       printf("%c", s[j]);
     }
    if (i != n-1) printf(" ");
    k = i+1;
   }
  else
   {
    if (s[i] == smb)
     fl = 1;
   }
 }
 getch();
 return 0;
}
Учиться, учиться и еще раз учиться
Ламер_001 вне форума Ответить с цитированием
Старый 11.11.2008, 16:26   #3
NamelessEndless
Ворон-мститель
Пользователь
 
Аватар для NamelessEndless
 
Регистрация: 26.05.2008
Сообщений: 24
По умолчанию

Ыыы.
Нет, придирается она к

Код:
char *change_string(char *str,char smb)
и
Код:
return new_str;

То, что Вы написали тоже хорошо, но факт того, что в лабе поставлено задание кроме main создать еще и пользовательскую функцию отдельно, которая и будет делать эту замену слов. Можно конечно переписать без стртока, но я сейчас сижу тут вместе с философией\С++\схемотехникой\диф.ур авнениями и не успеваю.

Вопрос в том, что изменить в моей коде...
Бог умер. Воскрес и мстит.
NamelessEndless вне форума Ответить с цитированием
Старый 12.11.2008, 00:46   #4
maxvodo.dll
Пользователь
 
Аватар для maxvodo.dll
 
Регистрация: 24.10.2008
Сообщений: 17
По умолчанию

по мне так,
Код:
 char *change_string(char *str,char smb)
выдает результатом адрес строки
но
Код:
return new_str; //а char new_str[150]="";правда если эта строчка возвращает адрес первого байта массива то все норм...
upd. в функции указан результат как адрес, но пытаемся возвратить статический массив
maxvodo.dll вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с многомерными массивами в функции. Очередной вопос начинающего (#005) Albert2008 Компоненты Delphi 14 13.08.2008 22:03
Функции Vinni_puh Microsoft Office Excel 1 20.12.2007 05:51
Функции furian Общие вопросы C/C++ 3 18.12.2007 12:48
Функции Pedro Общие вопросы Delphi 5 08.11.2007 15:39