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

Строки - C++

Восстановить пароль Регистрация
 
Ирбиска
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 13
31.05.2012, 08:25     Строки #1
Напишите программу, которая принимает с клавиатуры 2 строки и определяет, есть ли у них хотя бы один общий символ. Программа должна вывести только одно слово «есть» или «нет»
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 08:25     Строки
Посмотрите здесь:

C++ Вывести строки файла, после строки добавляя, сколько раз в ней встретилось слово
Даны две строки. Получить строку, в которой чередуются слова первой и второй строки C++
C++ Вывести на экран все строки данного массива одну за другой в виде целой строки
C++ .Упорядочить строки матрицы по убыванию значений произведений наименьшего и наибольшего элементов каждой строки
C++ Если строки одинаковы, объединить две строки, исключив из второй первые десять символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
31.05.2012, 09:18     Строки #2
Это не слишком хорошее решение (говнокодец), но он работает:

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
bool cmp(char *one, char *two);
 
int main(){
    
    const int count=50;
    char one[count], two[count];
    cout << "Enter str one: ";
    cin >> one;
    
    cout << "Enter str two: ";
    cin >> two;
 
    if(cmp(one, two)){ cout << "yes" << endl; }
    if(!cmp(one, two)){ cout << "no" << endl; }
 
    return 0;
}
 
bool cmp(char *one, char *two)
{
    char buff[2] = { ' ', '\0' }, buff2[2] = {' ', '\0'};
    for(int j=0; j<strlen(one); j++)
    {
         buff[0] = one[j];
            for(int i=0; i<strlen(two); i++)
            {
                buff2[0] = two[i]; 
                if(strcmp(buff, buff2) == 0){ return true; }
            }
    }
 
    return false;
 
}
CG
5 / 5 / 1
Регистрация: 10.05.2012
Сообщений: 12
31.05.2012, 09:34     Строки #3
Если вторая строка без пробелов...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
 
void main()
{
    char str1[20],str2[20];
    cout<<"String 1: ";
    gets(str1);
    cout<<"String 2: ";
    gets(str2);
    if(strpbrk(str1,str2))
        puts("Yes\n");
    else
        puts("No\n");
}
-=ЮрА=-
Заблокирован
Автор FAQ
31.05.2012, 09:36     Строки #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
#include <iostream>
using namespace std;
 
int main()
{
    char str1[256] = {0};
    char str2[256] = {0};
    cout<<"str1 : ";cin.getline(str1,255);
    cout<<"str2 : ";cin.getline(str2,255);
 
    bool bFlag= false;
    for(int i = 0; str2[i] != '\0' && !bFlag; i++)
    {
        if(strchr(str1,str2[i]))
            bFlag = true;
    }
    if(bFlag)
        cout<<"yes\n";
    else
        cout<<"no\n";
    system("pause");
    return 0;
}
Миниатюры
Строки  
-=ЮрА=-
Заблокирован
Автор FAQ
31.05.2012, 09:46     Строки #5
Также если есть желание обойтись вообще без стандартной библиотеки а также пропускать пробелы встречающиеся в строке, то код ниже как раз реализует данную логику
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 <iostream>
using namespace std;
 
bool isCharInStr(char * str, char chr, bool SkipSpaces);
 
int main()
{
    char str1[256] = {0};
    char str2[256] = {0};
    cout<<"str1 : ";cin.getline(str1,255);
    cout<<"str2 : ";cin.getline(str2,255);
 
    bool bFlag= false;
    for(int i = 0; str2[i] != '\0' && !bFlag; i++)
    {
        /*isCharInStr(...,true) значит пропускать пробелы*/
        if(isCharInStr(str1, str2[i], true))
            bFlag = true;
    }
    if(bFlag)
        cout<<"yes\n";
    else
        cout<<"no\n";
    system("pause");
    return 0;
}
 
bool isCharInStr(char * str, char chr, bool SkipSpaces)
{
    bool bFind = false;
    for(int i = 0; str[i] != '\0'; i++)
    {
        if(str[i] == chr)
            bFind = true;
        if(SkipSpaces)
        if(str[i] == ' ' || str[i] == '\t')
            bFind = false;
    }
    return bFind;
}
Миниатюры
Строки   Строки  
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
31.05.2012, 09:51     Строки #6
Можно вообще не использовать функции, полное решение задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
int main(){
    char a[256],b[256];
    int countA=0,countB=0;
    bool cA=true, cB=true,flag=false;
    cin.getline(a, 256);
    cin.getline(b, 256);
    for (int i=0; i<256; i++){
        if (a[i]=='\0') cA=false;
        if (b[i]=='\0') cB=false;
        if (a[i]!='\0' && cA) countA++;
        if (b[i]!='\0' && cB) countB++;
    }
    for (int i=0; i<=countA+1; i++)
        for (int j=0; j<=countB+1; j++)
            if (a[i]==b[i]) flag=true;
    if (flag) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    system("pause");
    return 0;
}
-=ЮрА=-
31.05.2012, 11:19
  #7

Не по теме:

Цитата Сообщение от rinat_w Посмотреть сообщение
for (int i=0; i<256; i++){
Скажем ввели строку в 32 символа, но крутим все 256 символов - нерационально...

rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
31.05.2012, 12:01     Строки #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Скажем ввели строку в 32 символа, но крутим все 256 символов - нерационально...
окей, вместо
C++
1
2
3
4
if (a[i]=='\0') cA=false;
if (b[i]=='\0') cB=false;
if (a[i]!='\0' && cA) countA++;
if (b[i]!='\0' && cB) countB++;
нужно написать
C++
1
2
3
4
if (a[i]=='\0') break;
if (b[i]=='\0') break;
if (a[i]!='\0') countA++;
if (b[i]!='\0') countB++;
-=ЮрА=-
Заблокирован
Автор FAQ
31.05.2012, 12:19     Строки #9
Послушай rinat_w, без обид, твой код необоснованно насыщен флагами и переменными, если уж и писать просто и без функций то уже так
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 <iostream>
using namespace std;
 
int main()
{
    char str1[256] = {0};
    char str2[256] = {0};
    cout<<"str1 : ";cin.getline(str1,255);
    cout<<"str2 : ";cin.getline(str2,255);
 
    int i, j;
    bool bFlag= false;
    for(i = 0; str1[i] != '\0' && !bFlag; i++)
    for(j = 0; str2[j] != '\0' && !bFlag; j++)
    {
        if(str1[i] != ' ' && str1[i] != '\t')
        if(str1[i] == str2[j] )
            bFlag = true;
    }
    if(bFlag)
        cout<<"yes\n";
    else
        cout<<"no\n";
    system("pause");
    return 0;
}
rinat_w
31.05.2012, 12:58
  #10

Не по теме:

-=ЮрА=-, главное правильно работает :-) , а быдлокод он из за того что с++ недавно изучать начал

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 13:20     Строки
Еще ссылки по теме:

C++ В динамической матрице целых чисел добавить строки после строки, содержащей простое число
C++ Определить, верно ли утверждение: сумма элементов каждой i-ой строки матрицы больше суммы (i-1)-ой строки
C++ Определить, верно ли утверждение: сумма элементов каждой i-й строки матрицы меньше суммы (i-1)-й строки

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
31.05.2012, 13:20     Строки
  #11

Не по теме:

Цитата Сообщение от rinat_w Посмотреть сообщение
-=ЮрА=-, главное правильно работает :-)
- ну вначле да - это самое главное лишь бы оно работало, но писать лучше чтобы было коротко и понятно

Yandex
Объявления
31.05.2012, 13:20     Строки
Ответ Создать тему
Опции темы

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