Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ирбиска
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 13
#1

Строки - C++

31.05.2012, 08:25. Просмотров 497. Ответов 10
Метки нет (Все метки)

Напишите программу, которая принимает с клавиатуры 2 строки и определяет, есть ли у них хотя бы один общий символ. Программа должна вывести только одно слово «есть» или «нет»
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2012, 08:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Строки (C++):

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки - C++
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки. 1. Я дуб дубом,даже...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк - C++
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: "Добавить строки, начиная...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 - C++
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней - C++
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка...

Найти среднее арифметическое каждой строки матрицы и отсортировать строки по возрастанию - C++
Дана квадратная матрица. Найти среднее арифметическое каждой строки и отсортировать строки по возрастанию этих характеристик

Функция перезаписывает символы строки заданным количеством символов другой строки - C++
Программа работает. Но не совсем правильно. В конечной строке появляются непонятные символы, которых быть там не должно. В программе нельзя...

10
Лжец
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;
 
}
1
CG
7 / 7 / 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");
}
0
-=ЮрА=-
Заблокирован
Автор 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;
}
1
Миниатюры
Строки  
-=ЮрА=-
Заблокирован
Автор 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;
}
0
Миниатюры
Строки   Строки  
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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;
}
0
-=ЮрА=-
31.05.2012, 11:19
  #7

Не по теме:

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

0
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
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++;
0
-=ЮрА=-
Заблокирован
Автор 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;
}
0
rinat_w
31.05.2012, 12:58
  #10

Не по теме:

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

0
-=ЮрА=-
31.05.2012, 13:20     Строки
  #11

Не по теме:

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

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

Чтение через fscanf_s части строки с пробелом (и запись этой же строки) - C++
нужно записать в файл строку, содержащую через табуляцию int, char, char, char, float, int. Далее необходимо из такой же строки вывести...

Вычислить длину введенной строки и вывести символы строки с четными индексами - C++
Напишите программу, которая требует ввода строки с клавиатуры. Программа вычисляет длину строки и выводит на экран только те символы...

Как считать строки из файла, если там больше одной строки? - C++
Как считать строки из файла в массив. Если в файле одна строка, то нет проблем, но если несколько, то при использовании функции fgets ...

Как первые два символа строки переставить в конец этой строки? - C++
Собственно вопрос


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru