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

Сравнение строки - C++

Восстановить пароль Регистрация
 
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
18.09.2013, 14:47     Сравнение строки #1
Есть переменная
char S[10];
В нее что-то записали.
Как проверить что S!="." и S!=".."
bool result;
в result записать true, если S!="." и S!=".."
То есть если строка - символ точка . , или две точки .. то result=false.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
18.09.2013, 14:50     Сравнение строки #2
При условии, что это "что-то" заканчивается нулем:

C++
1
bool result = strcmp(S, ".") && strcmp(S, "..");
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 14:51     Сравнение строки #3
strcmp
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
18.09.2013, 14:53  [ТС]     Сравнение строки #4
спасибо!
ValeryS
18.09.2013, 14:56
  #5

Не по теме:

Цитата Сообщение от fishec Посмотреть сообщение
Как проверить что S!="." и S!=".."
директории ищем

fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
18.09.2013, 15:09  [ТС]     Сравнение строки #6
Цитата Сообщение от ValeryS Посмотреть сообщение
директории ищем
ага))))

Добавлено через 6 минут
Еще вопрос:
Есть строка в которой что-то лежит.
char *d;
И еще одна:
char s[10];
Нужно сделать строку
char *out
в которой должно быть d + \ + s
Пример: d - "123"
s - "abs"
out должно быть 123\abc
И нельзя портить ни d ни s.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 15:23     Сравнение строки #7
strcat().
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
18.09.2013, 15:25     Сравнение строки #8
C
1
2
3
4
5
6
7
8
char *d = "123";
char s[10] = "abs";
char *out;
 
out = d;
strcat(out, "\\");
strcat(out, s);
printf(out);
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 15:26     Сравнение строки #9
SatanaXIII, хотите записать в строковый литерал?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
18.09.2013, 16:40     Сравнение строки #10
Croessmah, не могли бы вы пояснить более подробно мою ошибку?
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.09.2013, 16:51     Сравнение строки #11
Цитата Сообщение от SatanaXIII Посмотреть сообщение
не могли бы вы пояснить более подробно мою ошибку?
out - это указатель на char и ему присваивается адрес указателя d
А d указывает на константную строку:

эти две строки эквивалентны:
C++
1
char *d = "123";
C++
1
const char *d = "123";
Добавлено через 48 секунд
будет ошибка во время выполнения программы
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 17:24     Сравнение строки #12
C++
1
2
3
4
5
6
7
8
char *d = "abs";
char s[10] = "123";
char *out;
 
out = s;
strcat(out, "\\");
strcat(out, d);
printf(out);
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
18.09.2013, 18:48     Сравнение строки #13
alsav22, всё равно не то:
Цитата Сообщение от fishec Посмотреть сообщение
И нельзя портить ни d ни s.
тут динамическую память лучше использовать.

да и даже если портить можно, то получилось бы
s\d, а не d\s
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.09.2013, 19:47     Сравнение строки #14
Цитата Сообщение от Croessmah Посмотреть сообщение
alsav22, всё равно не то:
Согласен, но я на задание и не смотрел, просто исправил явные ошибки кода SatanaXIII, и чтобы получилось "123\abc".
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
19.09.2013, 12:42     Сравнение строки #15
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
int main (void)
{
char *d = "123";
char s[10] = "abs";
char *out;
                        // [0] [1] [2] [3]
out = d;                // '1' '2' '3' '\0'
 
                        //  [3]
printf("%s\n",&out[3]); // '\0'                   // "123\0"
 
strcat(out, "\\");
                        //  [3] [4]
printf("%s\n",&out[3]); // '\\' '\0'              // "123\\0"
 
strcat(out, s);
                        //  [3] [4] [5] [6] [7]
printf("%s\n",&out[3]); // '\\' 'a' 'b' 'c' '\0'  // "123\abc\0"
 
printf("%d\n", strlen(out) );  // 7
 
getch();
return 0;
}
Цитата Сообщение от _ Посмотреть сообщение
out - это указатель на char и ему присваивается адрес указателя d
А d указывает на константную строку
C
1
2
3
4
5
6
7
char *d = "123";
char *out;
 
out = d;
 
cout << &d << endl; // 1200064
cout << &out;       // 1200060
Цитата Сообщение от _ Посмотреть сообщение
будет ошибка во время выполнения программы
У Evg в блоге есть маленькая приписка (5.2), что подобные ситуации борландовский компилятор кушает и не давится, а gcc спотыкается. Поэтому хотелось бы вызвать еще и его самого, чтобы пояснил на пальцах этот маленький пример.

alsav22, есть конкретное условие:
C++
1
2
3
char *d = "123";
char s[10] = "abs";
char *out;
и необходимо в out собрать "123\abc", не трогая при этом ни d, ни s. Если вас не затруднит, покажите как это правильно реализовать.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 12:49     Сравнение строки #16
Цитата Сообщение от SatanaXIII Посмотреть сообщение
alsav22, есть конкретное условие:
Цитата Сообщение от SatanaXIII Посмотреть сообщение
и необходимо в out собрать "123\abc", не трогая при этом ни d, ни s. Если вас не затруднит, покажите как это правильно реализовать.
Думаю, что можно реализовать, но, извините, неинтересно.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 13:14     Сравнение строки #17
Не пойму, в чём сложность? Или что? Croessmah написал уже:
Цитата Сообщение от Croessmah Посмотреть сообщение
тут динамическую память лучше использовать.
Так, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char *d = "123";
    char s[10] = "abs";
    char *out = new char[8];
    // или так
    //char arr[8];
    //out = arr;
    
    strcpy(out, d);
    strcat(out, "\\");
    strcat(out, s);
 
    std::cout << out << std::endl
              << d << std::endl 
              << s << std::endl;
 
    delete [] out;
Миниатюры
Сравнение строки  
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
19.09.2013, 13:31     Сравнение строки #18
То есть статическими методами никак?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 13:45     Сравнение строки
Еще ссылки по теме:

C++ Сравнение.
C++ Сравнение строки в структуре с переменной типа char
Сравнение текстового файла и "строки" C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.09.2013, 13:45     Сравнение строки #19
Цитата Сообщение от SatanaXIII Посмотреть сообщение
То есть статическими методами никак?
Вот же:
Цитата Сообщение от alsav22 Посмотреть сообщение
// или так
//char arr[8];
//out = arr;
Только delete, в конце, тогда не нужен.
Ну, то есть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    char *d = "123";
    char s[10] = "abs";
    char *out;
    
    char arr[8];
    out = arr;
    
    strcpy(out, d);
    strcat(out, "\\");
    strcat(out, s);
 
    std::cout << out << std::endl
              << d << std::endl 
              << s << std::endl;
Yandex
Объявления
19.09.2013, 13:45     Сравнение строки
Ответ Создать тему
Опции темы

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