Урезать длинну кода - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 06.03.2012, 22:05   #1
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Урезать длинну кода

На мой взгляд получилась уж сильно грамоздко.
Закомментил все основные моменты, для более быстрого "разбора" кода. Подскажите/направте, что можно укоротить в коде.

Задача программы:
1. Ввести исходную строку.
2. Поменять первый символ на последний и последний на первый в каждом слове.
3. Ввести новую длину новой строки(она будет содержать текст редактированной строки, а длина разгоняется пробелами).

Все работает, но уж больно грамоздко :|

PHP код:
#include <iostream>
#include <fstream>

using namespace std;

// Расширение новой строки (заполнение пробелами)
void ExtensionIfANewLine(charstr,charstr_2,int s,int n)
{
    
int nSpace s;    // кол-во пробелов для новой строки          (str_2(newString))
    
int counterStr1 0,   // счетчик строки                            (str(editString))
        
counterStr2 0,   // счетчик новой строки                      (str_2(newString))
        
counterSpace 0,  // счетчик пробелов
        
position 0;      // позиция для выполнения
     
    
for(;str[counterStr1];counterStr2++)
    {
        if(
position==0)
        {
            if(
str[counterStr1]!=' ')
            {
                
str_2[counterStr2] = str[counterStr1];
                
counterStr1++;
            }
            else 
position 1;
        }
        else if(
position == 1)
        {
            
counterStr2--;
            
str_2[counterStr2] = str[counterStr1];
            
            for(;
counterSpace<nSpace;counterSpace++)
            {
                
counterStr2++;
                
str_2[counterStr2] = ' ';
            }
            
counterStr1++;
            
position 0;
        }
    }
}

// Счетчик слов в строке
int CountWordsInARow(charstr)
{
    
int nWord 0,          // кол-во найденных слов
        
position = -1;      // позиция для выполнения

    
for(int i 0;str[i];i++)
    {
       if(
position == -1)
       {
          if(
str[i] != ' 'position i;
       }
       else if(
str[i] == ' ')
       {
          
nWord++;
          
position = -1;
       }
    }
    if(
position != -1nWord++;
    
    return 
nWord;
}

// Смена позиции символа c сохранением предыдущего
void ChangingPositionCharacter(charstr,int j,int i)
{
    
char r str[j];
    
str[j] = str[i-1];
    
str[i-1] = r;
}

// Получение редактированной строки
void getEditString(charstr)
{
    
int size strlen(str);
    
int begin = -1;

    for(
int i=0;str[i];i++)
    {
       if(
begin == -1)
       {
          if(
str[i]!=' 'begin i;
       }
       else if(
str[i]==' ')
       {
          
ChangingPositionCharacter(str,begin,i);
          
begin = -1;
       }
    }
    if(
begin!=-1ChangingPositionCharacter(str,begin,size);
}

// Сохранение данных
int DataStorage(charstr,charnewFile,int n)
{
    
FILE *fopen(newFile"wt");
    if(
F==NULL
    {
        
printf("[Error!] Failed to save the data.\n"); 
        return 
0;
    }
    else 
    {
        for(
int i=0;i<n;i++)
            
fprintf(F,"%c",str[i]);        
        
fclose(F);
        
printf("The data are stored.\n");
        return 
1;
    }
}

int main()
{
    
char saveFile[256] = {0},     // имя файла для сохранения данных
         
sourceString[256] = {0}, // исходная строка 
         
editString[256] = {0},   // редактированная строка
         
newString[256] = {0};    // новая строка
         
    
int  lengthString 0,        // длина исходной строки
         
newLengthSring 0,      // длина новой строки
         
nWord 0;               // кол-во слов в исходной строке
         
    
    
printf("=================================================[Settlement Graphic Work N2]===");
    
printf("[Note!] Line can not consist of one word.\n");  // примечание к условию
    
    // зацикливаем до выполнения условия (см. примечание)
    
while(1)
    {
        
printf("Enter a string: "); gets(sourceString);      // ввод исходной строки
        
nWord CountWordsInARow(sourceString);                   // получаем кол-во введенных слов
        
        // проверяем на наличие более 2х слов в строке
        
if(nWord<=1)
            
printf("[Error!] Check the condition and try again.\n");   
        else break;
    }
    
    
strcpy(editString,sourceString);       // копируем содержимое из sourceString в editString
    
getEditString(editString);             // получаем отредактированную строку
    
lengthString strlen(editString);     // получаем длину строки
    
    
printf("[Note!] The length of the converted string\nshould be in the range from %d to 255.\n",lengthString);    // примечание к условию
    
    // зацикливаем до выполнения условия (см. примечание)
    
while(1)
    {
        
printf("Enter the length of new line: "); scanf("%d",&newLengthSring);      // ввод длины новой строки
        
        // проверка на ввод
        
if(newLengthSring<=lengthString || newLengthSring>=255)
            
printf("[Error!] Check the condition and try again.\n");
        else break;
    }
    
    
ExtensionIfANewLine(editString,newString,lengthString,newLengthSring);          // расширение новой строки (заполнение пробелами)
    
    // Результат
    
printf("=====================================================================[Result]===");
    
printf("sourceString = %s;\neditString = %s;\nnewString = %s;\n",sourceString,editString,newString);
    
    
// Сохранение данных
    
printf("===============================================================[Data storage]===");
    
printf("Save the file: "); scanf("%s",&saveFile);
    
DataStorage(newString,saveFile,newLengthSring);
        
    
system("PAUSE");
    return 
EXIT_SUCCESS;

Добавлено через 15 минут
Наглядный пример выполнения программы:

Последний раз редактировалось Effas; 06.03.2012 в 22:20. Причина: Добавлено сообщение
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 06.03.2012, 22:53   #2
Аватар для Yorie

По умолчанию Re: Урезать длинну кода

Как минимум, подсчет количества слов в строке ради того, чтобы вывести одно дохлое сообщение, избыточен. Можно от того уйти совсем, либо делать проверку внутри getEditString()
__________________
// aka Deft
Yorie вне форума Ответить с цитированием
Непрочитано 06.03.2012, 23:32   #3
Аватар для shocked
Пользователь

По умолчанию Re: Урезать длинну кода

На жабе это выглядело примерно бы так
PHP код:
      StringTokenizer qwe = new StringTokenizer("Hello Zone-Game info");
      
StringBuilder result = new StringBuilder();
      
      while ( 
qwe.hasMoreElements() ) {
          
char[] ch qwe.nextElement().toString().toCharArray();
          
char chtmp ch[0];
          
ch[0] = ch[ch.length-1];
          
ch[ch.length-1] = chtmp;
          
result.append(ch).append(" "); } 
З,Ы подскажите есть тег для java кода ?)
shocked вне форума Ответить с цитированием
Непрочитано 07.03.2012, 00:00   #4
Аватар для Azagthtot
Эксперт

По умолчанию Re: Урезать длинну кода

#include <iostream>
Пишите на C++? А std::string для кого придуман?
ЗАПОМНИТЕ - STL НЕОТЪЕМЛИМАЯ ЧАСТЬ С++!!!!
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 07.03.2012, 00:09   #5
Аватар для Nehrk
Постоялец

По умолчанию Re: Урезать длинну кода

imho
Перетащите функции в *.h и
__________________
Nehrk вне форума Отправить сообщение для Nehrk с помощью ICQ Ответить с цитированием
Непрочитано 07.03.2012, 00:10   #6
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Урезать длинну кода

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
#include <iostream>
Пишите на C++? А std::string для кого придуман?
ЗАПОМНИТЕ - STL НЕОТЪЕМЛИМАЯ ЧАСТЬ С++!!!!
String преподаватель запретил использовать.

Добавлено через 1 минуту
Цитата:
Сообщение от Yorie Посмотреть сообщение
Как минимум, подсчет количества слов в строке ради того, чтобы вывести одно дохлое сообщение, избыточен. Можно от того уйти совсем, либо делать проверку внутри getEditString()
В условие указано, если в строке меньше 1го слова, выводить ошибку.

Последний раз редактировалось Effas; 07.03.2012 в 00:11. Причина: Добавлено сообщение
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 07.03.2012, 00:13   #7
Аватар для Azagthtot
Эксперт

По умолчанию Re: Урезать длинну кода

string.h тоже? strstr() ну очень хорошая функция
Код:
char * mystring="This is a-test"; 
int wc = 1;
char * s = mystring;
for(;;) {
 char *s1 = strstr(s," ");
 if(!s1) s1 = strstr(s,",");
 if(!s1) s1 = strstr(s,"-");
 if(!s1) s1 = strstr(s,":");
 if(!s1) s1 = strstr(s,"-");
 if(!s1) break;
 wc++;
 s= s1+1;
}
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 07.03.2012, 00:16   #8
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Урезать длинну кода

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
string.h тоже? strstr() ну очень хорошая функция
Да, онли char.
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 07.03.2012, 00:21   #9
Аватар для Azagthtot
Эксперт

По умолчанию Re: Урезать длинну кода

Цитата:
Сообщение от Effas Посмотреть сообщение
Да, онли char.
Используйте алгоритм Рабина-Карпа для поиска
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Непрочитано 07.03.2012, 00:24   #10
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Урезать длинну кода

Цитата:
Сообщение от Azagthtot Посмотреть сообщение
Используйте алгоритм Рабина-Карпа для поиска
Вики:
Цитата:
Алгоритм Рабина — Карпа — это алгоритм поиска строки, который ищет шаблон, то есть подстроку, в тексте используя хеширование.
Разжевать не много можно? В каких целях я буду использовать у себя в программе?
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обфускатор Java кода Ramzessuss Java 5 21.09.2010 15:00
помогите урезать скилы ! raicer Архив 1 26.08.2010 11:36
[Куплю] Доработку php кода-стресс.веб. Karp Рынок / Marketplace 1 14.06.2010 23:30
Как урезать саб клас? nikliz Lineage II 1 18.06.2009 16:55
ошибочка кода воодишь акк virus Lineage II 1 18.06.2008 06:54


© 2007–2022 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 07:49. Часовой пояс GMT +3.

Вверх