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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 10:08   #1
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
Радость Не удаляются лишние пробелы

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main(){
/*объявление переменных*/
char temp[]="ababab ababbaa babaaa abbaaaa";
char st[]="";//обработанная строка
char mas[255];
int i;//счетчик
int t;//счетчик массива
/*удаляем лишние пробелы*/
for(i=1;i<=strlen(temp);i++){
if ((temp[i]==' ')&&(temp[i-1]==' ')) i++;
else {st[0]+=temp[i];}
}

printf("%s\n",st);
/*заносим слова в массив*/
t=0;
for(i=0;i<=strlen(st);i++){
if ((st[i]==' ')||(i==strlen(st)))t++;
mas[t]=mas[t]+st[i];
}
/*количество слов*/
printf("Kol-vo slov = %d",t);
getch();
}
алгоритм нормальный, но почему то не удаляются лишние пробелы..помогите, пожалуйста..
Neurogenus вне форума Ответить с цитированием
Старый 13.05.2010, 10:11   #2
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

if ((temp[i]==' ')&&(temp[i-1]==' ')) i++;
Вот тут ошибка.
Он два раза при таком раскладе будет i плюсовать. Первый раз тут и второй на очередной итерации... Там, наверное, continue нужно ставить
Или - if ((temp[i]==' ')&&(temp[i-1]==' ')) i++; заменить на if ((temp[i]==' ')&&(temp[i+1]==' ')) i++;
danekne вне форума Ответить с цитированием
Старый 13.05.2010, 10:15   #3
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
По умолчанию

Неа, выводит тоже самое что и было=(
Цитата:
for(i=0;i<=strlen(temp);i++){
if ((temp[i]==' ')&&(temp[i+1]==' ')) i+=2;
else {st[0]+=temp[i];}
}
Neurogenus вне форума Ответить с цитированием
Старый 13.05.2010, 10:23   #4
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Код:
char temp[]="ababab       ababbaa     babaaa  abbaaaa";
char st[]="";//обработанная строка
char mas[255];
int i;//счетчик
int t=0;//счетчик массива
/*удаляем лишние пробелы*/
for(i=1;i<=strlen(temp);i++)
{
 if ((temp[i]==' ')&&(temp[i+1]==' ')) continue;
else 
{
  mas[t]=temp[i];
  t++;
}
}
for(i=0; i<=strlen(mas); i++)
{
	cout<<mas[i];
}
Cpluser вне форума Ответить с цитированием
Старый 13.05.2010, 10:45   #5
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
Радость

Теперь CodeGear Rad 2010 Studio другую ошибку сыплет..=(
Вообще по заданию задумка такая - у нас есть строка представленная ввиде массива символов, нужно найти в этой строке слово с максимальным содержанием символов a и b.
Мой алгорит таков:
1)Удаляем в строке лишние пробелым(потому что препод любит пошутить с этими вещами);
2)Заносим каждое слово в массив строк;
3)Разбираем каждый элемент массива как строку и подсчитываем буквы a и b и далее по заданию выводим это слово;
Код:
#include <string.h>
#include <ctype.h>
void main(){
/*объявление переменных*/
char temp[]="ababab       ababbaa     babaaa  abbaaaa";
char st[]="";//обработанная строка
char* mas[255];
int i;//счетчик
int t=0;//счетчик массива

/*удаляем лишние пробелы*/
for(i=1;i<=strlen(temp);i++) {
 if ((temp[i]==' ')&&(temp[i+1]==' ')) continue; else
{st[t]=temp[i];t++;}}

/*заносим слова в массив*/
t=0;
for(i=0;i<=strlen(st);i++){
 if (st[i]=' ')t++;
 mas[t]+=st[i];}

/*выводим количество слов*/
printf("Kol-vo slov = %d",t);
getch();//ожидаем действий пользователя
}
Помогите пожалуйст исправить что не так... Особо сильно не пинайте, я только начал изучать си, на паскале б уже давно сделал что да как мне надо..но вот тут свои тонкости, которые понять мне пока что не дано=(
Neurogenus вне форума Ответить с цитированием
Старый 13.05.2010, 10:54   #6
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Понятно что сыплет массив st у тебя какого размера. я ж пример привел!
Cpluser вне форума Ответить с цитированием
Старый 13.05.2010, 12:43   #7
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Код:
#include <string.h>
#include <conio.h>
#include <ctype.h>
void main(){
/*объявление переменных*/
char temp[]="ababab       ababbaa     babaaa  abbaaaa";
char st[255]="";//обработанная строка максимум 255 символов
char mas[50][50]; //50 слов по 50 символов максимум
int i,j;//счетчик
int t=0;//счетчик массива

/*удаляем лишние пробелы*/
for(i=0;i<strlen(temp)-1;i++) 
{
 if ((temp[i]==' ')&&(temp[i+1]==' ')) continue; 
 else
 {st[t]=temp[i]; t++;}
}
if (temp[strlen(temp)-1]!=' ')
   st[t]=temp[i];

/*заносим слова в массив*/
t=0; j=0;
for(i=0;i<strlen(st);i++)
{
	if (st[i]==' ')
	{
		t++; j=0; i++;
		while ((st[i]!=' ') && (i<strlen(st)))
		{
			mas[t][j]=st[i];
			j++; i++;
		}
		mas[t][j]='\0';i--;
	}
	else
	{
		while ((st[i]!=' ') && (i<strlen(st)))
		{
			mas[t][j]=st[i];
			j++; i++;
		}
		mas[t][j]='\0';i--;
	}

}
/*выводим количество слов*/
printf("Kol-vo slov = %d",t+1);
getch();//ожидаем действий пользователя
}
Вот код, подсчет символов сделаешь сам
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 13.05.2010, 13:19   #8
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Для удаления всех пробеллов из строк можно воспользоваться следующим:
Код:
#include <algorithm>

using namespace std;

string strWhite = "abc def ghi jkl";

strWhite.erase(remove_if(strWhite.begin(), strWhite.end(), ::isspace), strWhite.end());
oleg kutkov вне форума Ответить с цитированием
Старый 13.05.2010, 13:21   #9
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
По умолчанию

oleg kutkov, это первая лаба - в ней разрешено только пользоваться строковыми массивами и все=) ознакомительная вроде как...шаг в сторону - использование других функций==несдаче лабы...
Neurogenus вне форума Ответить с цитированием
Старый 13.05.2010, 13:38   #10
Neurogenus
Заблокирован
 
Регистрация: 05.05.2010
Сообщений: 40
По умолчанию

удаляет первое слово если введено допустим так: "u popa byla sobaka" такое происходит именно с однобуквенными первыми словами...
Код:
/*раздел подключения модулей*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void main(){
/*объявление переменных*/
char tmp[255],st[255];
char mas[50][50]; //50 слов по 50 символов максимум
int i,j;//счетчик
int t=0;//счетчик массива

/*вводим строку*/
printf("vvedite pogaluista stroku!\n");
gets(tmp);

/*удаляем лишние пробелы*/
while (tmp[i]==' ') i++;
for(;i<strlen(tmp)-1;i++)
{if ((tmp[i]==' ')&&(tmp[i+1]==' ')) continue;
 else{st[t]=tmp[i]; t++;}}
if (tmp[strlen(tmp)-1]!=' ') st[t]=tmp[i];
printf("obrabotannaya stroka : \n");
printf("%s\n",st);

/*заносим слова в массив*/
t=0; j=0;
for(i=0;i<strlen(st);i++){
 if (st[i]==' '){t++; j=0; i++;
  while ((st[i]!=' ') && (i<strlen(st)))
   {mas[t][j]=st[i];j++; i++;}
	mas[t][j]='\0';i--;}
  else{
  while ((st[i]!=' ') && (i<strlen(st)))
   {mas[t][j]=st[i];j++; i++;}
	mas[t][j]='\0';i--;}}
/*выводим количество слов*/
printf("Kol-vo slov = %d",t+1);
getch();
}
Neurogenus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалять лишние пробелы из строки eduard17 Помощь студентам 4 19.02.2010 20:42
Убрать лишние пробелы из строки SoftKoc Общие вопросы Delphi 3 03.12.2009 23:54
Удалить лишние пробелы [C++] StudeHt Помощь студентам 2 20.05.2009 23:12
Удалить лишние пробелы Иван 883 Паскаль, Turbo Pascal, PascalABC.NET 5 06.04.2009 22:45