Форум программистов, компьютерный форум CyberForum.ru

Программа изменения слов - C++

Восстановить пароль Регистрация
 
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
24.06.2011, 21:08     Программа изменения слов #1
Программа должна изменять все слова во вводимой пользователем фразе следующим образом: первая буква слова ставится в конец, а после нее добавляются еще 2 буквы "ау". Т.е. например слово "jump" - "umpjay", "the" - "hetay" и т.п. Вот мой код, ошибка Access violation и выводит много бреда:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
 
void printLatinWord( char * );
 
//начало функции main
int main()
{   
    /*смена кодовой страницы для корректного
    отображения русского языка*/
    system( "chcp 1251" ); 
 
    char phrase[ 80 ];
    char *phrasePtr = phrase;
    char *tokenPtr;
 
    cout << "Enter a phrase to divide into parts: ";
    while (( *phrasePtr = cin.get() ) != '\n')
        phrasePtr++;
 
    tokenPtr = strtok( phrasePtr, " ");
    while ( tokenPtr != NULL )
    {
        printLatinWord( tokenPtr );
        tokenPtr = strtok( NULL, " " );
    }
 
    //ожидание нажатия клавиши и выход из программы
    cout << endl;
    system( "pause" );
    return 0;
}
 
// начало функции замены слов
void printLatinWord( char *string )
{
    char temp = string[ 0 ];
    char ay[] = "ay";
 
    for ( ; *( string + 1 ) != '\0'; string++ )
        *string = *( string + 1 );
    string++;
    *string = temp;
    strcat( string, ay );
    cout << string << " ";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2011, 21:08     Программа изменения слов
Посмотрите здесь:

выручайте! нужна программа изменения контрастности графического файла! C++
Любая программа на с++, которая вносит изменения в регистр C++
Программа, заменяющая английские сокращения слов C++
Программа выдает 3 ошибки. Одна из них: IntelliSense: выражение должно быть допустимым для изменения левосторонним значением C++
Нужна программа перевода слов в байты C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.06.2011, 21:34     Программа изменения слов #2
Seatless, ты передаешь в функцию какие то литералы которые имеют фиксированный размер и пытаешься записать в них данных больше чем их размер, заданный стртоком. можешь перераспределить память внутри функции конечно, но это ненужно (проще создать новую переменную), но и этого ненужно.
C
1
2
3
4
5
6
7
8
void printLatinWord( char *string )
{
        char temp = string[0];
 
        string++;
 
        cout << string << temp << "ay" << ' ';
}
да, и че это за чудо способ считать строку? оО
Цитата Сообщение от Seatless Посмотреть сообщение
while (( *phrasePtr = cin.get() ) != '\n') phrasePtr++;
std::cin.getline(phrase,80);
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.06.2011, 21:43     Программа изменения слов #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
void main(void) {
 
    const char*   txt = "ay";
 
    char  str[255];
    gets(str);
 
    char  tmp[32];
    for(char*  ptr = strtok(str, " "); ptr ; ptr = strtok(NULL, " ")) {
        char*  iter = tmp;
        strcpy(iter, ptr + 1);
        int   len = strlen(ptr) - 1;
        *((iter) + len) = *ptr;
                       strcpy(iter + len + 1, txt);
        puts(iter);
    }
 
  getchar();
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
24.06.2011, 22:20     Программа изменения слов #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_STR_LEN 256
#define ADDITION  "ay"
#define DELIMS " ,."
 
int main()
{
    char phrase[MAX_STR_LEN], 
        *result = NULL,
        *word;
    size_t curr_result_len = 0;
    size_t new_result_len = 0;
    size_t size_to_cpy = 0;
 
    printf("Enter the phrase: ");
    fgets(phrase, MAX_STR_LEN, stdin);
    word = strrchr(phrase, '\n');
    if (word != NULL)
        *word = '\0';
    if (0 == strlen(phrase)) {
        fputs("Incorrect phrase!\n", stdout);
        exit(1);
    }
    
    for (word = strtok(phrase, DELIMS);
        word != NULL;
        word = strtok(NULL, DELIMS))
    {
        new_result_len = curr_result_len + strlen(word) + strlen(ADDITION) + 1;
        if ((result = (char *) realloc(result,
            new_result_len * sizeof(char))) == NULL)
        {
            fputs("Can't allocate memory\n", stderr);
            exit(2);
        }
        size_to_cpy = strlen(word + 1);
        memcpy(result + curr_result_len, 
            word + 1,
            size_to_cpy);
        curr_result_len += size_to_cpy;
 
        result[curr_result_len] = *word;
        ++curr_result_len;
        
        size_to_cpy = strlen(ADDITION) + 1;
        memcpy(result + curr_result_len,
            ADDITION " ", 
            size_to_cpy);
        curr_result_len += size_to_cpy;
    }
    result[curr_result_len] = '\0';
    printf("Result: %s\n", result);
    exit(0);
}
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
24.06.2011, 22:31  [ТС]     Программа изменения слов #5
Ясно,всем спасибо за помощь =)
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
25.06.2011, 00:48     Программа изменения слов #6
Забыл память освободить, нужно добавить строку
C
1
free(result);
перед exit(0);
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
25.06.2011, 22:30     Программа изменения слов #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
int main( int argc, char *argv[] )
{
    std::string Line ( "jump" );
    
    char FirstLetter = Line.at ( 0 );
    
    Line.erase ( Line.begin(), Line.begin() + 1 );
    
    Line = Line + FirstLetter + "ay";
    
    std::cout << Line << std::endl;
    
    std::cin.get();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2011, 22:53     Программа изменения слов
Еще ссылки по теме:

Программа деления слов на слоги C++
C++ Программа перевода рублей в евро с возможностью изменения курса валюты
C++ Программа подсчета символов и слов в минуту

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Seatless
1 / 1 / 0
Регистрация: 19.06.2011
Сообщений: 24
25.06.2011, 22:53  [ТС]     Программа изменения слов #8
Цитата Сообщение от Mиxaил Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
 
int main( int argc, char *argv[] )
{
    std::string Line ( "jump" );
    
    char FirstLetter = Line.at ( 0 );
    
    Line.erase ( Line.begin(), Line.begin() + 1 );
    
    Line = Line + FirstLetter + "ay";
    
    std::cout << Line << std::endl;
    
    std::cin.get();
    return 0;
}
Стринг библиотекой пользоваться нельзя в упражнении, к тому же я ее еще толком не знаю =) Да и я уже разобрался с этой прогой.
Yandex
Объявления
25.06.2011, 22:53     Программа изменения слов
Ответ Создать тему
Опции темы

Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru