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

В тексте поменять местами первое и предпоследнее слово - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
gagga
Сообщений: n/a
27.10.2011, 06:24     В тексте поменять местами первое и предпоследнее слово #1
1. В тексте поменять местами первое и предпоследнее слово, слова разделены пробелами, за последним словом – точка.
2. В каждом слове текста все последующие вхождения первого символа написать заглавной буквой.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
27.10.2011, 08:27     В тексте поменять местами первое и предпоследнее слово #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
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
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char*  first_upper(char* str);
char* swap_word(char* str);
 
int main(void) {
  char buf[64];
  char str[] = "informix torrent, wow(windows), oslo.";
  printf("%s\n\n",  first_upper(str) );
 
  // обмен первого с предпоследним словом
  strcpy(buf, " leopard, bars, cat:animals.");
  printf("src: %s\n", buf);
  printf("dst: %s\n\n", swap_word(buf));
 
  strcpy(buf, "mars, venus, mercury planets...");
  printf("src: %s\n", buf);
  printf("dst: %s\n\n", swap_word(buf));
  getchar();
  return 0;
}
 
 
// сделать все слова с заглавной буквы по первому символу слова
char*  first_upper(char* str) {
  int   cnt;
  char  ch, *tmp = str;
  for(cnt = 0; *str; *str++) {
       if(isalpha(*str)) {
           if(cnt > 0 && toupper(*str) == ch)
                 *str = ch;
           if(! cnt) ch = toupper(*str);  
                   cnt++;
       } else {
            cnt = 0;
            ch  = '\0';
       }
   }
   return tmp;
}
 
 
// поменять местами первое слово с предпоследним 
char* swap_word(char* str) {
   int len;
   char* tmp = str;
   char fbuf[32] = { '\0' };
   char lbuf[32] = { '\0' }; 
   char* end, *sa, *sb, *sa1, *sb1;
 
   for(sa = str; ! isalpha(*sa) && *sa; *sa++);
   for(sb = sa;  isalpha(*sb) && *sb; *sb++);
   strncpy(fbuf, sa, sb - sa);  
   for(sa1 = str + (strlen(str)-1), len = 2; len > 0; len--) {
        for(; ! isalpha(*sa1) && *sa1; *sa1--);
        for(sb1 = sa1; isalpha(*sa1) && *sa1; *sa1--);
   }
   strncpy(lbuf, ++sa1, sb1 - sa1); 
   if(strlen(lbuf) > strlen(fbuf)) {  
          len = strlen(lbuf) - strlen(fbuf);
          strncpy(strcpy(sa1, sa1 + len), fbuf, strlen(fbuf));
          for(end = str + (strlen(str)); len > 0; len--, ++end)
               for(sa1 = end, sb1 = end - 1; sa1 > sa+len; *sa1-- = *sb1--); 
          strncpy(sa, lbuf, strlen(lbuf));
   } else {
          len = strlen(fbuf) - strlen(lbuf);
          strncpy(strncpy(sa, sa + len, sa1 - sa),  lbuf, strlen(lbuf));
          strncpy(sa1 - len, fbuf, strlen(fbuf));
    }
    return tmp;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
27.10.2011, 09:36     В тексте поменять местами первое и предпоследнее слово #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main(void){
    char buf[] = "bla bla bla", * p;
 
    printf("Before: %s\n", buf);
    for ( p = strchr(buf + 1, *buf); p; p = strchr(p + 1, *buf) )
        *p = toupper(*p);
    printf("After:  %s\n", buf);
 
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 12:18     В тексте поменять местами первое и предпоследнее слово #4
Цитата Сообщение от gagga Посмотреть сообщение
1. В тексте поменять местами первое и предпоследнее слово, слова разделены пробелами, за последним словом – точка.
- Вот Си реализация указанного задания
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
60
61
62
63
64
65
66
67
68
#include <stdio.h> //printf scanf
#include <string.h>//strtok
#include <ctype.h> //toupper - вернёт символ в верхнем регистре
 
int main()
{
    long i,nWords = 0;//Число слов в строке
    char chr, str[1024];
    char buf[1024];//Буффер строки str
    char first[32];//1-е слово
    char blast[32];//предпоследнее слово
    char delim[] = " ,.!?";//Возможные разделители между словами
    printf("Enter sentence\n");
    scanf("%[^\n]%c",str,&chr);
    //sprintf(str,"word1 word2 word3 word4 word5");
    //Копируем в buf строку
    sprintf(buf,"%s",str);
    //Выделяем из строки токены (слова)
    //части ограниченные символами из delim
    char * tok = strtok(buf,delim);//Выделили 1-е слово
    if(tok)
    {
        //Подсчитываем число слов
        while(tok)
        {
            nWords++;
            tok = strtok(NULL,delim);
        }
        //Снова копируем в buf строку
        sprintf(buf,"%s",str);
        tok = strtok(buf,delim);//Выделили 1-е слово
        sprintf(first,"%s",tok);
        i = 0;//Обнулили счётчик слов
        while(tok && (i < nWords - 2))
        {
            i++;
            tok = strtok(NULL,delim);
        }
        //Записываем предпоследнее слово
        sprintf(blast,"%s",tok);
        
        tok = strtok(str,delim);//Выделили 1-е слово
        i = 0;//Обнулили счётчик слов
        tok = strtok(NULL,delim);//Пропустили 1-е слово
 
        //Записали в str предпоследнее слово
        sprintf(buf,"%s",blast);
        i++;
        while(tok)
        {
            strcat(buf," ");
            if(i == nWords - 2)
                strcat(buf,first);
            else
                strcat(buf,tok);
            i++;
            tok = strtok(NULL,delim);//Пропустили 1-е слово
        }
 
        printf("String after replacing 1-st and before last words\n");
        printf("%s.\n",strcpy(str,buf));
    }
    else
        printf("String not contain words or empty\n");
    printf("Press any key to continue\n");
    scanf("%c",&chr);
    return 0;
}
Миниатюры
В тексте поменять местами первое и предпоследнее слово  
-=ЮрА=-
Заблокирован
Автор FAQ
27.10.2011, 12:27     В тексте поменять местами первое и предпоследнее слово #5
Цитата Сообщение от gagga Посмотреть сообщение
2. В каждом слове текста все последующие вхождения первого символа написать заглавной буквой.
- я сделал заглавную для 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
35
36
37
38
39
40
41
42
43
44
#include <stdio.h> //printf scanf
#include <string.h>//strtok
#include <ctype.h> //toupper - вернёт символ в верхнем регистре
 
int main()
{
    char chr, str[1024];
    char buf[1024];//Буффер строки str
    char delim[] = " ,.!?";//Возможные разделители между словами
    printf("Enter sentence\n");
    scanf("%[^\n]%c",str,&chr);
    //sprintf(str,"word1 word2 word3 word4 word5");
    //Копируем в buf строку
    sprintf(buf,"%s",str);
    //Выделяем из строки токены (слова)
    //части ограниченные символами из delim
    char * tok = strtok(str,delim);//Выделили 1-е слово
    if(tok)
    {
        buf[0] = '\0';
        //Нам нужен 1-й символ, но для наглядности показываю
        //что с любым символом строки можно
        chr = tok[1];//2-й символ строки
        //Подсчитываем число слов
        while(tok)
        {
            strcat(buf,tok);//Добавили в стркоу слово
            strcat(buf," ");//Добавили пробел после слова
            tok = strtok(NULL,delim);
        }
        //Заменяем все вхождения chr в строку
        //на заглавную букву
        while((tok = strchr(buf,chr)))
            buf[strlen(buf) - strlen(tok)] = toupper(chr);
        
        printf("String after replacing 1-st and before last words\n");
        printf("%s\n",strcpy(str,buf));
    }
    else
        printf("String not contain words or empty\n");
    printf("Press any key to continue\n");
    scanf("%c",&chr);
    return 0;
}
Миниатюры
В тексте поменять местами первое и предпоследнее слово  
Yandex
Объявления
27.10.2011, 12:27     В тексте поменять местами первое и предпоследнее слово
Ответ Создать тему
Опции темы

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