Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2011, 18:22   #1
noname1
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 10
По умолчанию С++ работа со строками

Вот такая задача
Написать программу которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Спасибо
noname1 вне форума Ответить с цитированием
Старый 11.01.2011, 19:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
считывает текст из файла
Какими способами? Их ведь много.
Покажи хотя бы как считываешь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2011, 19:09   #3
noname1
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 10
По умолчанию

Вот есть немного похожая задача, только там нужно наоборот содержащие 2значные не выводить. Но вроде она и строки с 3трезначными не выводит. Ввод из файла как здесь
Код:
#include <iostream>
#include <stdio.h>
#include <ctype.h>

using namespace std;

#define STRING_LEN 70 // длина строки

int main()
{
FILE *file;
char buff[STRING_LEN];
unsigned int n, i, dig;

file = fopen("file.txt", "r"); // открываем файл для чтения
if(!file) // если не открыли
return -1; // выходим
while(fgets(buff, STRING_LEN, file)) // читаем все строки до конца файла
{
dig = 0; // флаг наличия двузначного числа
n = strlen(buff); // получаем длину строки
if(n >= 2) // если длина строки больше или равно 2
{
for(i = 0; i != n; i++) // проходим по всей строке
{
// устанавливаем значение флага присутствия двузначного числа
dig = isdigit(buff[i]) // текущий символ - цифра
& isdigit(buff[i+1]); // и следующий за ним символ - цифра
if(dig) // если есть двухзначное число 
break; // выходим из цикла
}
if(!dig) // если двузначного числа в строке нет
cout << buff; // выводим строку в консоль
}
}
fclose(file); // закрываем файл
return 0; // выходим
}
Да, я в название темы немного ошибся, все равно на чем будет С или С++, даже на С немного лучше будет

Последний раз редактировалось Stilet; 11.01.2011 в 19:39.
noname1 вне форума Ответить с цитированием
Старый 11.01.2011, 19:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На вскидку:
Код:
// fsdfsd.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <ctype.h>

int _tmain(int argc, _TCHAR* argv[])
{
	FILE *f=fopen("c:\\temp\\q.txt","r");
	char s[255];
	while(!feof(f)){
		fscanf(f,"%s",&s);
		for(int i=0;s[i];i++){
			if( isdigit(s[i]) && isdigit(s[i+1]) && (isalpha(s[i+2])) ){
				printf("%s\n",s);break;
			}
		}
		
	}
	fclose(f);
	getchar();
	return 0;
}
Но проверь. Я не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2011, 20:15   #5
noname1
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 10
По умолчанию

ошибку вот такую выдало

C:\4222\4222.cpp(7) : error C2061: syntax error : identifier '_TCHAR'
noname1 вне форума Ответить с цитированием
Старый 11.01.2011, 20:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это пример под VS2010Beta, я не в курсе какую ты используешь
В крайнем случае убери
Цитата:
#include "stdafx.h"
И
Цитата:
int _tmain(int argc, _TCHAR* argv[])
Замени на ту что в твоем примере.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2011, 20:48   #7
noname1
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 10
По умолчанию

Спасибо, вроде на верном пути. Теперь запускается, но не работает.
текст файла примерно такой у меня:
hft22
daj2
ka1
32
dla222
1
444

И в общем ничего не выводится почему то. можешь прокомментировать вот эту строку: if( isdigit(s[i]) && isdigit(s[i+1]) && (isalpha(s[i+2])) ){

Как я понимаю тут пишется, если первые 2 символа цифры, а третий нет.

Если последние условие стереть, то печатает и все строки с более 2значными цифрами. А так вообще ничего, странно
noname1 вне форума Ответить с цитированием
Старый 11.01.2011, 20:57   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

тут вот в чём ошибка по коду Stilet
Цитата:
Код:
for(int i=0;s[i];i++){
			if( isdigit(s[i]) && isdigit(s[i+1]) && (isalpha(s[i+2])) ){
				printf("%s\n",s);break;
			}
		}
Вам нужно определить строку с 2 значным числом! Тоесть это первая строка
hft22
но дело в том что когда i равна позиции первой двойки, то i+1 равно позиции второй двойки! А i+2 уходит за пределы! И наврятли там буква!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 11.01.2011, 21:07   #9
noname1
Пользователь
 
Регистрация: 11.01.2011
Сообщений: 10
По умолчанию

Ну а какой правильный код тогда?
noname1 вне форума Ответить с цитированием
Старый 11.01.2011, 21:13   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну можно так попробывать!
Код:
for(int i=2; i < strlen(s); i++)
{                       //Проверка по ходу строки
			if( isdigit(s[i-2]) && isdigit(s[i-1]) && (isalpha(s[i])) )
                        {
				printf("%s\n",s);break;
			}
                        //Проверка на два конечных, если не было выхода из цикла
                        if (i == (strlen(s) - 1))
                        {
                             if ( (isalpha(s[i-2])) && (isdigit(s[i-1])) && (isdigit(s[i])) )
                             {
                                   printf("%s\n",s);break;
                              }
                        }
}
Код кривоват конечно
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками Blond_89 Паскаль, Turbo Pascal, PascalABC.NET 6 27.12.2010 19:33
Работа со строками immortal12388 Помощь студентам 23 29.11.2010 16:30
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками. ViNcHeStEr Помощь студентам 6 29.06.2008 08:14