30/09/2018, 18:53

Thắc mắc bài tập chuỗi: tìm từ dài nhất

mình làm bài tìm từ dài nhất này chia thành 2 trường hợp là xét từ đầu tiên rùi sau đó mới xét các phía sau . trường hợp xét chữ đầu tiên thì đúng còn trường hợp kia thì nếu mún in ra kết quả phải thêm dấu cách sau từ đó thì mới in ra kết quả .

#include "stdafx.h"
#include<iostream>
#include<conio.h>
#include<math.h>
#include<string.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	char s[20];
	int len;
	do
	{
		cout << " nhap chuoi ki tu : ";
		cin.getline(s, 50);
		cout << " chuoi vua nhap ";
		cout << "*" << s << "*" << endl;
		// tìm từ dài nhất
		len = strlen(s);
		int a[100];
		int na = 0;
		if (s[0] != NULL && s[0] != 32) // xét độ dài từ đầu tiên 
		{
			int dem = 1;
			for (int i = 1; i < len; i++)
			{
				if (s[i] != 32)
				{
					dem++;
				}
				else
					break;
			}
			a[na++] = dem;
		}
		for (int i = 1; i < len; i++) // xét độ dài những từ tiếp theo
		{
			if (s[i] != 32)
			{
				int dem = 1;
				for (int j = i + 1; j < len; j++)
				{
					if (s[j] != 32)
					{
						dem++;
					}
					else break;
				}
				a[na++] = dem;
			}
		}
		int max = a[0]; // tìm số từ dài nhất là bao nhiêu
		for (int i = 1; i < na; i++)
		{
			if (max < a[i])
			{
				max = a[i];
			}
		}
		if (s[0] != NULL &&s[0] != 32) // xét từ đầu tiên có thoã không 
		{
			int dem = 1;
			int min;
			for (int i = 1; i < len; i++)
			{
				if (s[i] != 32)
				{
					dem++;
				}
				else
				{
					min = i ;
					break;
				}
			}
			if (dem == max)
			{
				for (int j = 0; j <= min; j++)
					cout << s[j];
				cout << endl;
			}
		}
		for (int i = 1; i < len; i++) // xét những từ phía sau có thoả không 
		{
			int min;
			int dem = 0;
			if (s[i] != 32)
			{
				dem++;
				for (int j = i + 1; j < len; j++)
				{
					if (s[j] != 32)
						dem++;
					else
					{
						min = j;
						break;
					}
				}
			}
			if (dem == max)
			{
				for (int z = i; z < min-1; z++)
					cout << s[z];
				cout << endl;
			}
		}
	} while (_getch() != 27);
	return 0;
}
X viết 20:53 ngày 30/09/2018

Một cách khác ngắn hơn:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];	// input
    char b[30];		// temporary
    char c[30];		// result
    int j = 0, maxlength = 0;

    gets(a); // input

    for(int i = 0; i <= strlen(a); i++){
        if(a[i] != 32 && a[i] != '\0'){
	    b[j++] = a[i];
	}else{
            b[j] = '\0';
            if(strlen(b) > maxlength){
                strcpy(c, b);		// b -> c
                maxlength = strlen(b);	// update maxLength
            }
            j = 0;
        }
    }
    puts(c); // output - result
    return 0;
}
Nhóc Lãng Tử viết 20:53 ngày 30/09/2018

Tks nhiều . Mà bạn có cách nào sửa giúp bài trên của mình được không , mình không hiểu tại sao phải thêm dấu cách sau từ dài nhất mới in ra được

Đạt Đỗ viết 20:59 ngày 30/09/2018
#include <iostream>
#include <string.h>
#include <vector>

int main() {
        vector<string> v;
        string s;
        gets(s);
        s+=' ';
        string t;
        int maxx=-999999;
        for(int i =0; i<s.size(); i++ {
              if(s[i]!=' '){
                    t+=s[i];
              } else { 
                     v.push_back(t);
                     maxx= max(t.size(),maxx);
                     t="";
              }
        
        }
        for(int i =0;i<v.size();i++){
              if(v[i].size()==maxx) cout << v[i] << endl;
        }

}

//// thì bạn thêm ’ ’ vào cuối chuỗi của bạn :3

lochuynh95 viết 20:55 ngày 30/09/2018

Ban oi cho minh hoi tai sao dong cuoi cung lại j=0 ; vay

Bài liên quan
0