سلام
من می خوام محتوای یک فایل text رو بخونم که حاوی یک رشته هست .
حالا می خوام تعداد تکرار هر کدوم از کلمات این رشته رو پیدا کنم .
نمی دونم چه کدی بنوسیسم یا چه جور کلمه به کلمه محتوای فایل رو بخونم .
می شه لطفاً راهنمایی کنید ؟
سلام
من می خوام محتوای یک فایل text رو بخونم که حاوی یک رشته هست .
حالا می خوام تعداد تکرار هر کدوم از کلمات این رشته رو پیدا کنم .
نمی دونم چه کدی بنوسیسم یا چه جور کلمه به کلمه محتوای فایل رو بخونم .
می شه لطفاً راهنمایی کنید ؟
سلام ...
برای خوندنن فایل که فکر نمی کنم مشکلی داشته باشی پس تا اینجا یه رشته داریم
می تونی این رشته رو کاراکتر به کاراکتر بخونی تا '\32' که کد space باشه (به فرض اینکه کلمه ها با SPACE از هم جدا شده باشه)
تا اینجا یه کلمه رو خوندی برای اینکه کلمه های بعدی رو بخونه شمارنده رو + 1 کن که از SPACE رد بشه و دوباره کاراکتر ها رو بخون
موفق باشی
ممنون از جوابتون من این کد رو نوشتم به نظر شما درسته؟
تعریف آرایه ای از رشته ها و استفاده از دستور سفقفخن رو درست انجام دادم؟
char * Str;Char *p_arr[] I=0; fseek (InFile, 0 , SEEK_END); lSize = ftell (InFile); rewind (InFile); fread (buffer,1,lSize,pFile); Str = strtok (str," "); while (Str!= NULL) { p_arr[i]= Str; Str = strtok (NULL, " "); i++; }
نمی دونم پرا فونتش ریخت بهم .
char * Str;fseek (InFile, 0 , SEEK_END); lSize = ftell (InFile); rewind (InFile); fread (buffer,1,lSize,pFile); Str = strtok (str," "); while (Str!= NULL) { p_arr[i]= Str; Str = strtok (NULL, " "); }char *p_arr[];)
برای خوندن کلمه به کلمه فایل نیازی به چک کردن space و این چیزا نیست.
به این شکل بنویس:
عملگر << خودش تا space جریان ورودی رو میخونه.
#include <iostream.h>
#include <fstream.h>
void main()
{
ifstream in("test.txt",ios::in);
char s[20];
while(!in.eof())
{
in>>s;
cout<<s<<endl;
}
}
شما کدت رو توی تگ کد قرار بده تا اینجوری بهم نریزه.
این کد من درست هست؟ تعریف آرایه من درسته؟
می خوام کلمات فایل رو داخا آرایه ذخیره کنه
#include <iostream.h>#include <fstream.h>void main(){char *p_arr[]; int i=; ifstream in("test.txt",ios::in); char s[20]; while(!in.eof()) { in>>s;p_arr[i]=s; i++; }
با عرض سلام
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 256
main(int argc, char *argv[])
{
char inword[MAX_LENGTH];
int word_count = 0;
FILE *infile;
if (argc < 2)
{
printf("Format : wordcnt <filename>\n");
exit( 1 );
}
/* open the infile */
if ((infile = fopen( argv[1], "rt" )) == NULL)
{
printf("Cannot open input file - %s\n", argv[1] );
exit( 1 );
}
/* read the string and count it while not end of file */
while( !feof(infile) )
{
fscanf( infile, "%s", inword );
word_count++;
}
/* print the result */
printf( "There are %d word(s) in the file %s\n", word_count, argv[1] );
/* close the infile */
fclose(infile);
return(0);
}
به یاد جونی
فقط به exe باید مسیر فایل بدی، یا بجای *argv یه مسیر فایل تعریف کن
ببخشید که باز سوال می پرسم.
اگه بخوام تک تک کلمه ها رو در یک آرایه ذخیره کنم یعنی هر کلمه در یک خونه از آرایه . می شه راهنمایی کنید چه کدی بنویسم ؟ چون نیاز دارم که تعداد تکرار هر کلمه از آرایه رو بدست بیاورم .
همون کدی که توی 2 تا پست قبلیت نوشتی درسته تقریبا فقط اینجوری بنویس:اگه بخوام تک تک کلمه ها رو در یک آرایه ذخیره کنم یعنی هر کلمه در یک خونه از آرایه . می شه راهنمایی کنید چه کدی بنویسم ؟ چون نیاز دارم که تعداد تکرار هر کلمه از آرایه رو بدست بیاورم .
یعنی اشاره گر s رو داخل حلقه تخصیص حافظه کن. و برای آرایه p_arr هم حتما باید طول در نظر بگیری.
#include <iostream.h>
#include <fstream.h>
void main()
{
char *p_arr[10];
int i=0;
ifstream in("test.txt",ios::in);
char *s;
while(!in.eof())
{
s=new char [20];
in>>s;
p_arr[i]=s;
i++;
}
}
سلام به همگی
وقتی دستور
while( !feof(infile) )
برای رسیدن به انتهای فایل رو می نویسم برنامه ام هنگ می کنه . چی کار کنم برای این شرط؟
می شه بگم تا مادامی که آخرین کاراکتر فایل enter هست برو از فایلت بخون؟
inter رو چه جور معرفی کنم؟
نمی دونم چرا دستور بالا موجب هنگ کردن برنامم می شه .
اینجوری نمیشه درست برنامه رو نوشت چون ممکنه وسط متن یه جایی enter خورده باشه ولی انتهای فایل نباشه. شما برنامت رو بزار تا شاید بشه فهمید که مشکلش چیه یا اگه برنامت طولانیه یه مثالی کوچیکی در مورد همین هنگ کردن بزار.می شه بگم تا مادامی که آخرین کاراکتر فایل enter هست برو از فایلت بخون؟
دوست عزیز این کارو بکن توی یه حلقه بینهایت با همون دستوری که دوستمون نوشتن کلمه ها رو بخون و دستور زیر باعث میشه وقتی فایلت تموم شد از حلقه میاد بیرون.
در ضمن برای اینکه تعداد هر کلمه رو بشماری هم چند تا راه داری بهتره تخصیص پویا باشه.
if (fin.fail())
break;