14 / 14 / 5
Регистрация: 10.02.2010
Сообщений: 72
1

Дана строка. Указать те слова, которые содержат хотя бы одну букву k

13.04.2010, 20:23. Показов 2756. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот само задание
Дана строка. Указать те слова, которые содержат хотя бы одну букву k

Нужно было сделать на Си и Ассемблере в вствке.
Проблема с ассемблером, не могу разобраться как работать со строками на асме.
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
#include "stdafx.h"
#include <string.h>
#include "iostream"
#define len 100
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char str[len];
    printf("Введите строку: ");
        fgets( str, len, stdin ); 
    char* pstr = strtok(str," ");
    printf("На Си\n");
    while(pstr != 0)
    {
        if(strchr(pstr, 'k') != 0) puts(pstr);
        pstr = strtok(0, " ");
    }
 
    _asm
    {
 
    }
    
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2010, 20:23
Ответы с готовыми решениями:

Дана строка.Указать те слова,которые содержат хотя бы одну букву f.
Помогите плиз!Дана строка.Указать те слова,которые содержат хотя бы одну букву f.

Дана строка. Указать те слова, которые содержат хотя бы одну букву k
Решите кто может завтра уже здавать. Я просто представления неимею как их делать, я по С++ не шарю...

Дана строка, указать те слова, которые содержат хотя бы одну букву «k»
Дана строка, указать те слова, которые содержат хотя бы одну букву «k». Считать, что слова в тексте...

Дана строка. Указать те слова, которые содержат хотя бы одну букву k
Помогите Дана строка. Указать те слова, которые содержат хотя бы одну букву k.

9
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
14.04.2010, 09:57 2
как с массивом символов
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
14.04.2010, 22:28 3
Вот пример функции которая проверяет есть ли символ в строке...
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
#include <iostream>
 
int func_(const char *s, char a){
    int res = 0;
    __asm{
            ; strlen(s)
            mov edi, s
            mov ecx, -1
            xor eax, eax
            repne scasb
            neg ecx
            dec ecx ; ecx == strlen(s) + 1
 
            mov edi, s
            mov al, a
            repne scasb
            jne end
            inc res
    end:
    }
 
    return res;
}
 
int main(){
 
    const char *str = "abs";
    if(func_(str, 'a')) std::cout << "ok...";
 
    return 0;
}
0
14 / 14 / 5
Регистрация: 10.02.2010
Сообщений: 72
17.04.2010, 13:04  [ТС] 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
#include "stdafx.h"
#include <string.h>
#include "iostream"
#define len 100
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char str[len];
    char symbol = 'k';
    printf("Введите строку: ");
    fgets( str, len, stdin ); 
    char* pstr = strtok(str," ");
    printf("На Си\n");
    while(pstr != 0)
    {
        if(strchr(pstr, 'k') != 0) puts(pstr);
        pstr = strtok(0, " ");
    }
 
    _asm
    {
        lea esi,str
next:
        cmp byte ptr [esi],symbol  ; сравниваем с символом
        jnz notfound
    }
    puts(pstr);
    _asm
    {
notfound:
        inc esi 
        cmp byte ptr [esi],0   ; если следующий символ 0...
        jz exit          ; ,то это конец строки
        jmp next       ; если нет, то повторяем.
exit:
    }
    
    return 0;
}
0
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
17.04.2010, 15:20 5
Цитата Сообщение от DartDayring Посмотреть сообщение
Ни чего не понимаю:

Как мне сравнить строку с символом?
Assembler
1
cmp byte ptr [esi],symbol  ; сравниваем с символом
У вас symbol="k", т.е. строка должна выглядеть так:

Assembler
1
cmp byte ptr [esi],'k'  ; сравниваем с символом
0
14 / 14 / 5
Регистрация: 10.02.2010
Сообщений: 72
18.04.2010, 20:26  [ТС] 6
Все равно что то не так, прога проверяет только первое слово строки.
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
#include "stdafx.h"
#include <string.h>
#include "iostream"
#define len 100
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char str[len];
    printf("Введите строку: ");
    fgets( str, len, stdin ); 
    char* pstr = strtok(str," ");
    printf("На Си\n");
    while(pstr != 0)
    {
        if(strchr(pstr, 'k') != 0) puts(pstr);
        pstr = strtok(0, " ");
    }
 
    _asm
    {
        mov ecx,len
        lea esi,str
next:
        mov bl,byte ptr [esi]
        cmp byte ptr [esi],'k'  
        jnz notfound
    }
        puts(str);
    _asm
    {
notfound:
        inc esi 
        cmp byte ptr [esi],0   
        jz exit        
        jmp next     
exit:
    }
    
    return 0;
}
Добавлено через 5 часов 21 минуту
Вот поработал с кодом, но есть ошибка в выводе слова на экран.
Выводится только первое слово строки, как исправить?
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
#include "stdafx.h"
#include <string.h>
#include "iostream"
#define len 100
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char str[len];
    printf("Введите строку: ");
    fgets( str, len, stdin ); 
    char* pstr = strtok(str," ");
    printf("На Си\n");
    while(pstr != 0)
    {
        if(strchr(pstr, 'k') != 0) puts(pstr);
        pstr = strtok(0, " ");
    }
    printf("На ассемблере\n");
    _asm
    {
        mov ebx,len
        lea esi,str
next:
        mov bl,byte ptr [esi]
        cmp byte ptr [esi],'k'  
        jnz notfound
    }
        puts(str);     // Вот здесь!!
    _asm
    {
notfound:
        inc esi 
        cmp byte ptr [esi],0   
        jz sled          
        jmp next       
sled:
        inc esi
        dec ebx
        cmp ebx,0
        jle ext
        jmp next
ext:
    }
    
    return 0;
}
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
19.04.2010, 00:42 7
Наверное стоит сделать так же как и в случае на Си, т.е. выделять отдельные слова и в них искать, а то какой толк пытаться выводить всю строку.
0
14 / 14 / 5
Регистрация: 10.02.2010
Сообщений: 72
19.04.2010, 00:52  [ТС] 8
Каким образом сделать это на асме, подскажите?
0
14 / 14 / 5
Регистрация: 10.02.2010
Сообщений: 72
20.04.2010, 23:12  [ТС] 9
Все еще нужны ваша помощь и ваши советы.

Добавлено через 5 часов 0 минут
Почему в регистр bl загружается не верный символ
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
#include "stdafx.h"
#include <string.h>
#include <windows.h>
#include "iostream"
#define len 100
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    char str[len];
    char *ast;
    printf("Введите строку: ");
    fgets( str, len, stdin ); 
    char* pstr = strtok(str," ");
    printf("На Си\n");
    while(pstr != 0)
    {
        if(strchr(pstr, 'k') != 0) puts(pstr);
        pstr = strtok(0, " ");
    }
    printf("На ассемблере\n");
 
 
    ast=strtok(str," ");
    _asm
    {
        lea esi,ast
next:
        mov bl,byte ptr [esi]
        cmp byte ptr [esi],0 
        je ext
 
 
        cmp byte ptr [esi],'k' 
        jnz notfound
    }
        puts(ast);
    _asm
    {
notfound:
    }
    ast=strtok(0," ");
    _asm{
        inc esi 
        jmp next  
 
ext:
    }
    return 0;
}
0
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
20.04.2010, 23:27 10
потому, что ast это ссылка
Assembler
1
lea esi,ast
заменить на
Assembler
1
mov esi,ast
0
20.04.2010, 23:27
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2010, 23:27
Помогаю со студенческими работами здесь

Дана строка, указать те слова, которые содержат хотя бы одну букву «k»
Дана строка, указать те слова, которые содержат хотя бы одну букву «k». Считать, что слова в тексте...

Дана строка. Указать те слова, которые содержат хотя бы одну букву с
Дана строка. Указать те слова, которые содержат хотя бы одну букву с.

Дана строка. Указать слова, которые содержат хотя бы одну букву а (на Паскале)
очень прошу до 7 часов вечера,нужно срочно!

Задача: Дана строка. Указать те слова, которые содержат хотя бы одну букву «а»
Дана строка. Указать те слова, которые содержат хотя бы одну букву «а». Считать, что слова в тексте...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru