Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
billy goat
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 11
1

перевернуть строки

18.04.2011, 17:42. Просмотров 1691. Ответов 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
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int main()
{unsigned char *s1, *s2, *s3;
 FILE *f1, *f2;
 int j=0;
 s1 = (unsigned char *) malloc (sizeof (unsigned char)*256);
 s2 = (unsigned char *) malloc (sizeof (unsigned char)*256);
 s3 = (unsigned char *) malloc (sizeof (unsigned char)*256);
 
 
if( ( f1 = fopen("input.txt", "rt") ) == NULL )
    { 
      fprintf ( stderr, "Cannot open\n"); 
      system ("pause"); 
      return 1;
        }
     
  f2=fopen ("input1.txt", "wt");      
 
  while (fgets ((char *)s1,255,f1)){
     for (int i=0; i<strlen((char *)s1); i++) 
     if (isprint(s1[i])) 
           s2[j++]=s1[i]; 
      
 s2[j]='\0';
 
 j=0;
 for (int i=strlen((char *)s2)-1; i>=0; i--) 
    s3[j++]= s2[i];  
    s3[j]='\0';                        
 
  }
 fputs((char *)s3,f2);
 fprintf (f2, "\n\n");  
 
 fclose (f1);         
 fclose (f2);
 
 f1=fopen ("input.txt", "rt");
 f2=fopen ("input1.txt", "at");
 fprintf (f2, "\n\n"); 
 
 free(s1);
 free(s2);
 free(s3);
  
 return 0; 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2011, 17:42
Ответы с готовыми решениями:

Перевернуть каждое слово строки
В записке слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение

Перевернуть четные строки в массиве
Пожалуйста помогите, что я делаю не так не понимаю. Задание перевернуть четные строки матрицы...

Перевернуть четные строки двумерного массива
Здравствуйте, нужно перевернуть четные строки двумерного массива . переворот одномерного ясен но...

Перевернуть четные строки двумерного массива
Здравствуйте, нужно перевернуть четные строки двумерного массива . Вот что вышло но программа...

Перевернуть четные строки двумерного массива
Здравствуйте, нужно перевернуть четные строки двумерного массива . переворот одномерного ясен но...

6
asics
Freelance
Эксперт С++
2861 / 1796 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
18.04.2011, 18:08 2
Цитата Сообщение от billy goat Посмотреть сообщение
Необходимо перевернуть все слова в строках,но так,чтобы каждое из них осталось на своем месте
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
#include <stdio.h>
#include <string.h>
#include <cstdlib>
 
void rev_str(char *str) {
  char tmp;
  int i = 0;
  int size = 0;
  for (size; str[size] != '\0'; size++);
  size--;
  while (i <= size) {
    tmp = str[i];
    str[i] = str[size];
    str[size] = tmp;
    size--;
    i++;
  }
}
 
#define DELIM " .,:;?!"
 
int main(void){
  char str[BUFSIZ], *words[BUFSIZ], *p;
  int i = 0, j = 0;
  printf("\n\nString = ");
  scanf("%[^\n]%*c", str);
  for(p = strtok(str, DELIM); p; p = strtok(NULL, DELIM)){
    rev_str(p);
    words[i] = (char*)malloc(sizeof(char) * strlen(p));
    strcpy(words[i++], p);
  }
  printf("\n\nResult = ");
  while(j < i){
    printf("%s ", words[j]);
    free(words[j++]);
  }
  return 0;
}
Код
String = bla lab programming


Result = alb bal gnimmargorp
Process returned 0 (0x0)   execution time : 21.875 s
Press any key to continue.
1
easybudda
Модератор
Эксперт CЭксперт С++
10246 / 6137 / 1543
Регистрация: 25.07.2009
Сообщений: 11,681
18.04.2011, 18:25 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 <stdio.h>
#include <string.h>
 
char * reverse(char * str){
    char c;
    char * h = str;
    char * t = str + strlen(str) - 1;
    while ( h < t ){
        c = *h;
        *h = *t;
        *t = c;
        ++h;
        --t;
    }
    return str;
}
 
int main(void){
    char bufIn[BUFSIZ], bufOut[BUFSIZ], * p;
 
    while ( printf("String: ") && scanf("%[^\n]%*c", bufIn) == 1 ){
        *bufOut = 0;
        for ( p = strtok(bufIn, " "); p; p = strtok(NULL, " ") ){
            strcat(bufOut, reverse(p));
            strcat(bufOut, " ");
        }
        printf("Result: %s\n", bufOut);
    }
 
    return 0;
}
1
igorrr37
1989 / 1573 / 791
Регистрация: 21.12.2010
Сообщений: 2,701
Записей в блоге: 10
18.04.2011, 18:38 4
ещё способ
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<ctype.h>
 
int main(){
    char text[100]=" This, header; \"f i  l  e\"  defines several. "
    , *a=text, *b=text, tmp, *tmpb=NULL;
    for(; *a; ++a){
        if(isalpha(*a)){
            b=a;
            while(isalpha(*(b+1)))++b;
            for(tmpb=b; a<b; ++a, --b){
                tmp=*a;
                *a=*b;
                *b=tmp;
            }
            while(isalpha(*a+1))++a;
        }
    }
    puts(text);
    return 0;
}
1
billy goat
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 11
24.04.2011, 13:40  [ТС] 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// экзамен1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
 
 
int main()
{ 
 
 unsigned char *s1, *s2, *s3;
 FILE *f1, *f2;
 char *p;
 s1 = (unsigned char *) malloc (sizeof (unsigned char)*256);
 s2 = (unsigned char *) malloc (sizeof (unsigned char)*256);
 s3 = (unsigned char *) malloc (sizeof (unsigned char)*256);
  int j=0;
 
  if( ( f1 = fopen("input.txt", "rt") ) == NULL )
    { 
      fprintf ( stderr, "Cannot open\n"); 
      system ("pause"); 
      return 1;
        }
     
  f2=fopen ("input1.txt", "wt");      
 
while (fgets ((char *)s1,255,f1)){
     for (int i=0; i<strlen((char *)s1); i++) 
 s2[j++]=s1[i]; 
      
s2[j]='\0';
        
p= strtok((char *)s2," \n\t");
while (p!=NULL)
{
strrev(p);
strcat((char *)s3,p);
strcat((char *)s3," ");
p= strtok(NULL," \n\t");
}
 
 }
 
 fputs((char *)s3,f2);
 fprintf (f2, "\n\n");  
 fclose (f1);         
 fclose (f2);
 
 f1=fopen ("input.txt", "rt");
 f2=fopen ("input1.txt", "at");
 fprintf (f2, "\n"); 
 
 free(s1);
 free(s2); 
 
 return 0; 
}
не подскажите в чем беда?
считывает только 1ую строку + перед нужными словами кучу ш,э и прочего безобразия
0
billy goat
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 11
25.04.2011, 19:43  [ТС] 6
Переформулируем:
Как сделать так,чтобы на лексеммы разбивалась не только 1ая строка,но и последущие?
0
billy goat
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 11
14.05.2011, 19:26  [ТС] 7
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> 
 
int main(){
 
        char *p; 
        char *s1=(char*)malloc(sizeof(char)*256);
        char *s2=(char*)malloc(sizeof(char)*256);
        FILE *f1=fopen("input.txt","rt");
        FILE *f2=fopen("input1.txt","wt");
        s1[0]=s2[0]='\0';
 
        if((!f1)||(!f2))
                return 1;
 
        while (fgets(s1,255,f1)){
                s2[0]='\0';
                strcpy(s2,s1); 
                
                if (p=strtok(s2," \n\t"))
                        do{
                                strrev(p);
                                fprintf(f2,"%s ",p);
                        } while ((p=strtok(NULL," \n\t"))!=NULL);
 
                fprintf(f2, "\n");
                s1[0]='\0';
        }
 
        fclose(f1);        
        fclose(f2);
        free(s1);
        free(s2);
        return 0;
}
теперь уже любопытство удовлетворить хочется)

Как сделать,чтобы,если было безумное число пробелов,оно сохранялось,а не оставлся один?

т.е

а_______________________пор

должно стать "роп_______________________а",а не "роп а"
0
14.05.2011, 19:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2011, 19:26

Указатели, символьные строки и функции: перевернуть все слова в строке
«Перевернуть» в строке все слова. (Например: «Жили были дед и баба» — «илиЖ илыб дед и абаб»)

Перевернуть строчку
Задание заключается в том, чтобы поменять введенные слова в строчке задом на перед. Например: ввели...

Перевернуть файл
Доброго времени суток. Каким образом написать программу, переворачивающую файл задом наперед?....


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

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

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