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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 08:57   #1
CooL_bobrui
 
Регистрация: 02.11.2009
Сообщений: 7
По умолчанию Строки , проблема

Пише лабу в универ. Программа для поиска симметричных слов в тексте (есть какое-то умное слово в русском языке )). Первое слово свапнутое наоборот выглядит примерно так : казакэээ«««««««« (при вводимом "казак"). И оно соответственно не выходит симметричным , хотя таковым является. Полагаю какая-то проблема с определением конца строки. Но чо я только не делал..


Код:
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <string.h>



int _tmain(int argc, _TCHAR* argv[])
{	
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	
	char str[255];
	char *dynstr= {NULL};

	printf("Введите строку, в которой нужно найти симметричные слова\n");
	gets(str);

	dynstr = new char [strlen(str)+1];
	strcpy(dynstr,str);

	//puts(dynstr);
	getchar();

	char token[] = " .,!\n";
	char *words[255] = {NULL},*dynswap= {NULL},*word2[1]= {NULL};
	int counter=0,i=0,j=0;

		
	words[counter] = strtok( dynstr , token );
	while( words[counter] != NULL )
	{	
		dynswap = new char [strlen(words[counter]+1)];
				
	
		// Пока есть фрагменты в строке
		//printf( "%s\n", words[counter] );

		for (j=0; j<strlen(words[counter])+1;j++)
		{	
			if (words[counter][j]!=(char)'/0')
			{
				dynswap[j]=words[counter][strlen(words[counter]+1)-j];
			}
		}
		
		printf("%d\n", strlen(words[counter]));

		if (strcmp(dynswap,words[counter])==0)
		{	
			
			printf("Атат , слово симметрично - ");
			
		}

		puts(dynswap);
		

		// Получить следующий фрагмент: 
		counter++;
		words[counter] = strtok( NULL , token ); 
		getchar();
	}

	
	return 0;
}
В коде может присутствовать кое-что лишнее - результаты моих эксперементов..
CooL_bobrui вне форума Ответить с цитированием
Старый 02.11.2009, 09:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что мешает воспользоваться функцией ReverseString?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2009, 14:43   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вот так работает:
Код:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <stdio.h>


int _tmain(int argc, _TCHAR* argv[])
{	
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	
	char str[255];
	char *dynstr = NULL; // фигурных скобок при инициализации указателя не надо

	printf("Введите строку, в которой нужно найти симметричные слова\n");
	gets(str);

	dynstr = new char [strlen(str)+1];
	strcpy(dynstr,str);

	//puts(dynstr);
	getchar();

	char token[] = " .,!\n";
	char *words[255] = {NULL},*dynswap= {NULL},*word2[1]= {NULL};
	int counter=0,i=0,j=0;

		
	words[counter] = strtok( dynstr , token );
	while( words[counter] != NULL )
	{	
		int word_len = strlen(words[counter]); // Вычислять длину слова каждый раз неэффективно. Лучше сделать это один раз
		dynswap = new char [word_len+1]; 
				
	
		// Пока есть фрагменты в строке
		//printf( "%s\n", words[counter] );



		for (j=0; j < word_len;j++)
		{
			dynswap[j]=words[counter][word_len - j - 1]; // Пропускаем терминатор('\0') записываем
			// все буквы из words[counter] в dynswap с конца
		}

		dynswap[j] = '\0'; // Записываем в dynswap завершающий 0, ведь мы его так и не скопировали из исходной строки
		
		printf("%d\n", word_len);

		if (strcmp(dynswap,words[counter])==0)
		{	
			
			printf("Атат , слово симметрично - ");
			
		}

		puts(dynswap);
                      delete[] dynswap; // Не забываем освобождать память, иначе будет утечка
		

		// Получить следующий фрагмент: 
		counter++;
		words[counter] = strtok( NULL , token ); 
		getchar();
	}

	
	return 0;
}

Последний раз редактировалось netrino; 02.11.2009 в 14:47.
netrino вне форума Ответить с цитированием
Старый 02.11.2009, 16:52   #4
CooL_bobrui
 
Регистрация: 02.11.2009
Сообщений: 7
По умолчанию

Спасибо. Решено.
CooL_bobrui вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки-проблема Absent Паскаль, Turbo Pascal, PascalABC.NET 5 12.10.2009 20:22
проблема с преобразованием строки в число в С++ Lorden Помощь студентам 21 03.04.2009 14:05
C++: проблема с чтением строки ф-ей ReadConsole() Retiz Помощь студентам 2 18.09.2008 21:32
Проблема с выводом строки kezman Общие вопросы C/C++ 1 30.08.2008 20:41
Строки. проблема сEOF Baron Общие вопросы C/C++ 1 13.01.2008 18:44