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

Замена символов в строке - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
15.03.2014, 23:33     Замена символов в строке #1
Доброго времени суток.
Есть такой код.
C++
1
char text="hello world";
Как заменить слово "world" в этой строке на слово "Mike".
Искал в поисковых системах, нашёл функцию StringReplace и метод String.Replase.
Только вот при попытке их использовать выходит ошибка, мол необъявленный индефикатор.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2014, 23:50     Замена символов в строке #2
Цитата Сообщение от Logotipo Посмотреть сообщение
Есть такой код.
И он компилируется?
Может так?
C++
1
const char* text = "hello world";
uhx
 Аватар для uhx
56 / 56 / 6
Регистрация: 11.07.2013
Сообщений: 302
15.03.2014, 23:51     Замена символов в строке #3
http://www.cplusplus.com/reference/c...str/?kw=strstr
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
15.03.2014, 23:52  [ТС]     Замена символов в строке #4
alsav22, Это не суть, я для примера, так как же всё таки заменить?

Добавлено через 1 минуту
uhx, спасибо, попробую
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.03.2014, 23:54     Замена символов в строке #5
Цитата Сообщение от Logotipo Посмотреть сообщение
Это не суть
Это, как раз, суть.
Цитата Сообщение от Logotipo Посмотреть сообщение
я для примера
Зачем кривые примеры выкладывать? Или хотите получить такой же ответ?
C++
1
2
3
4
const char* text = "hello world";
cout << text << endl;
text = "hello Mike";
cout << text << endl;
Заменил?
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
15.03.2014, 23:59  [ТС]     Замена символов в строке #6
alsav22, нужно заменить кусок текста из str на текст из str2...
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2014, 00:00     Замена символов в строке #7
Цитата Сообщение от Logotipo Посмотреть сообщение
нужно заменить кусок текста из str на текст из str2...
Код нормальный покажите, где это нужно сделать. Телепатов и ясновидящих здесь нет.
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
16.03.2014, 00:13  [ТС]     Замена символов в строке #8
C++
1
2
3
4
5
static char     last_servermsg[256];
char                  nickname[36];
сhar                  nickwithid[41];
getPlayerName(id,nickname);
_snprintf_s(nickwithid,sizeof(nickwithid),"%s[%d]",nickname,id);
Вот нужно в строке last_servermsg заменить nickname на nickwithid.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2014, 00:38     Замена символов в строке #9
Цитата Сообщение от Logotipo Посмотреть сообщение
Вот нужно в строке last_servermsg заменить nickname на nickwithid.
nickname находится в начале last_servermsg и после него нет никаких данных?
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
16.03.2014, 19:48  [ТС]     Замена символов в строке #10
alsav22, ну вот весь код целиком
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
58
59
uint8_t _declspec ( naked ) server_message_hook ( void )
{
    int     thismsg;
    DWORD   thiscolor;
 
    __asm mov thismsg, esi
    __asm mov thiscolor, eax
    thiscolor = ( thiscolor >> 8 ) | 0xFF000000;
 
    static char     last_servermsg[256];
    static DWORD    allow_show_again;
    if ( !set.anti_spam || cheat_state->_generic.cheat_panic_enabled
     || (strcmp(last_servermsg, (char *)thismsg) != NULL || GetTickCount() > allow_show_again) )
    {
        // might be a personal message by muted player - look for name in server message
        // ignore message, if name was found
        if ( set.anti_spam && g_iNumPlayersMuted > 0 )
        {
            int i, j;
            char *playerName = NULL;
            for ( i = 0, j = 0; i < SAMP_PLAYER_MAX && j < g_iNumPlayersMuted; i++ )
            {
                if ( g_bPlayerMuted[i] )
                {
                    playerName = (char*)getPlayerName(i);
 
                    if ( playerName == NULL )
                    {
                        // Player not connected anymore - remove player from muted list
                        g_bPlayerMuted[i] = false;
                        g_iNumPlayersMuted--;
                        continue;
                    }
                    else if ( strstr((char*)thismsg, playerName) != NULL )
                        goto ignoreThisServChatMsg;
                    j++;
                }
            }
        }
        snprintf(last_servermsg,256,"");
        LogChatbox(false,"%s 1",last_servermsg);
        LogChatbox(false,"%s 2",(char *)thismsg);
        strcpy_s(last_servermsg,(char *)thismsg);
        LogChatbox(false,"%s 3",last_servermsg);
        cheat_state->_generic.id = 1;
        if(cheat_state->_generic.id == 1){
            for(int i=0;i<1000;i++){
                char * name=(char *)getPlayerName(i);
            //  int len=strlen((char *)name);
                if(findstrinstr((char *)last_servermsg,(char *)name)){
                    char * namewithid[41];
                    snprintf((char *)namewithid,41,"%s[%d]",name,i);
                    int len2 = strlen((char *)namewithid);
                    char * pch; 
                    pch = strstr((char *)last_servermsg,name);
                    strncpy((char *)pch,(char *)namewithid,len2);
                }
            }
        }
На выходе я получаю какую-то кашу, например предыдущая строка "Добро пожаловать на Advance RolePlay!", а следующая
"- s {FFFFFF}(Mike_Vile[209] RolePlay!"
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.03.2014, 19:58     Замена символов в строке #11
Цитата Сообщение от Logotipo Посмотреть сообщение
ну вот весь код целиком
Ну и где здесь nickname и nickwithid?
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
16.03.2014, 20:07  [ТС]     Замена символов в строке #12
alsav22, nickwithid есть, а nickname переименована на name.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2014, 02:41     Замена символов в строке #13
Цитата Сообщение от Logotipo Посмотреть сообщение
nickwithid есть
В какой строке кода, в 10 посте?
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
17.03.2014, 07:44  [ТС]     Замена символов в строке #14
alsav22, 51 и 52, тоже переименовано, не заметил, извиняюсь.
Alex5
906 / 641 / 90
Регистрация: 12.04.2010
Сообщений: 1,631
17.03.2014, 12:35     Замена символов в строке #15
Цитата Сообщение от Logotipo Посмотреть сообщение
например предыдущая строка "Добро пожаловать на Advance RolePlay!"
Какая строка? last_servermsg?
Цитата Сообщение от Logotipo Посмотреть сообщение
На выходе я получаю какую-то кашу, например
Можно точнее? Номер строки кода, где получается "какая-то каша"?
Цитата Сообщение от Logotipo Посмотреть сообщение
C++
1
2
pch = strstr((char *)last_servermsg,name);
 strncpy((char *)pch,(char *)namewithid,len2);
Например, можно с помощью отладчика посмотреть, что содержат переменные namewithid, name, last_servermsg. Перед и после выполнения strncpy().
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
17.03.2014, 14:42  [ТС]     Замена символов в строке #16
Весь код, что я скинул - обработчик сообщений сервера. Каждое сообщение записывается в строку last_servermsg.
Я прологировал все строки, везде всё нормально, но после
C++
1
strncpy((char *)pch,(char *)namewithid,len2);
На выходе вместо - s(Mike_Vile[100]) получается - s(Mike_Vile[100] Advance Role Play, т.е. добавляется часть из предыдущего сообщения.
Я пробовал заменить strncpy на strcpy," Advance Role Play" пропадает, но после "- s(Mike_Vile[100]" ничего нет, хотя там должно быть продолжение сообщения.
Alex5
906 / 641 / 90
Регистрация: 12.04.2010
Сообщений: 1,631
17.03.2014, 18:28     Замена символов в строке #17
Цитата Сообщение от Logotipo Посмотреть сообщение
Я пробовал заменить strncpy на strcpy," Advance Role Play" пропадает, но после "- s(Mike_Vile[100]" ничего нет, хотя там должно быть продолжение сообщения.
Это происходит, потому что strcpy() копирует также нулевой символ - признак конца строки.
Logotipo, Вы пробовали в учебнике по C или C++ найти параграф о строках?

C++
1
2
3
4
5
6
7
8
    char text[] = "Hello John. How are you?";
    cout << text << endl;
 
    strcpy( text+6, "Mike" );
    cout << text << endl;  // остаток строки "пропал"
 
    strncpy( text+6, "world", strlen("world") );
    cout << text << endl;  // теперь остаток строки "появился"
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
18.03.2014, 17:17  [ТС]     Замена символов в строке #18
Alex5, c strcpy понятно, а вот почему strncpy копирует кашу, не понятно
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2014, 17:38     Замена символов в строке #19
Потому что strlen() выдаёт количество символов без '\0'.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 18:07     Замена символов в строке
Еще ссылки по теме:

C++ Замена символов в строке
Замена символов в строке C++
Замена символов в строке C++
Замена символов в строке C++
C++ Замена символов в строке с while

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

Или воспользуйтесь поиском по форуму:
Logotipo
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 15
18.03.2014, 18:07  [ТС]     Замена символов в строке #20
alsav22, есть ставить strlen()+1, то опять же пропадает конец строки.
Yandex
Объявления
18.03.2014, 18:07     Замена символов в строке
Ответ Создать тему
Опции темы

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