Hướng dẫn count word in string c++ - đếm từ trong chuỗi C++

Tôi cần viết một hàm sẽ đếm các từ trong một chuỗi. Với mục đích của bài tập này, một "từ" được định nghĩa là một chuỗi các ký tự không phải là null, không phải là màu, được tách ra với các từ khác bằng khoảng trắng.

Đây là những gì tôi có cho đến nay:

int words(const char sentence[ ]);

int i, length=0, count=0, last=0;
length= strlen(sentence);

for (i=0, i<length, i++)
 if (sentence[i] != ' ')
     if (last=0)
        count++;
     else
        last=1;
 else
     last=0;

return count;

Tôi không chắc nó có hoạt động hay không vì tôi không thể kiểm tra nó cho đến khi toàn bộ chương trình của tôi kết thúc và tôi không chắc nó sẽ hoạt động, có cách nào tốt hơn để viết chức năng này không?

Hướng dẫn count word in string c++ - đếm từ trong chuỗi C++

sehe

360K47 Huy hiệu vàng437 Huy hiệu bạc602 Huy hiệu đồng47 gold badges437 silver badges602 bronze badges

Đã hỏi ngày 2 tháng 10 năm 2012 lúc 21:44Oct 2, 2012 at 21:44

4

Bạn cân no

int words(const char sentence[])
{
}

(Lưu ý niềng răng).

Đối với các vòng lặp đi với

int words(const char sentence[])
{
}
8 thay vì
int words(const char sentence[])
{
}
9.


Không có bất kỳ từ chối trách nhiệm nào, đây là những gì tôi đã viết:

Xem nó trực tiếp http://ideone.com/ungplhttp://ideone.com/uNgPL

#include <string.h>
#include <stdio.h>

int words(const char sentence[ ])
{
    int counted = 0; // result

    // state:
    const char* it = sentence;
    int inword = 0;

    do switch(*it) {
        case '\0': 
        case ' ': case '\t': case '\n': case '\r': // TODO others?
            if (inword) { inword = 0; counted++; }
            break;
        default: inword = 1;
    } while(*it++);

    return counted;
}

int main(int argc, const char *argv[])
{
    printf("%d\n", words(""));
    printf("%d\n", words("\t"));
    printf("%d\n", words("   a      castle     "));
    printf("%d\n", words("my world is a castle"));
}

Đã trả lời ngày 2 tháng 10 năm 2012 lúc 22:11Oct 2, 2012 at 22:11

Sehesehesehe

360K47 Huy hiệu vàng437 Huy hiệu bạc602 Huy hiệu đồng47 gold badges437 silver badges602 bronze badges

Đã hỏi ngày 2 tháng 10 năm 2012 lúc 21:44

int words(const char *sentence)
{
    int count=0,i,len;
    char lastC;
    len=strlen(sentence);
    if(len > 0)
    {
        lastC = sentence[0];
    }
    for(i=0; i<=len; i++)
    {
        if((sentence[i]==' ' || sentence[i]=='\0') && lastC != ' ')
        {
            count++;
        }
        lastC = sentence[i];
    }
    return count;
}

Bạn cân no

int main() 
{ 
    char str[30] = "a posse ad esse";
    printf("Words = %i\n", words(str));
}

(Lưu ý niềng răng).

Words = 4

Đối với các vòng lặp đi với

int words(const char sentence[])
{
}
8 thay vì
int words(const char sentence[])
{
}
9.Oct 2, 2012 at 22:03

Hướng dẫn count word in string c++ - đếm từ trong chuỗi C++

Không có bất kỳ từ chối trách nhiệm nào, đây là những gì tôi đã viết:aleroot

Xem nó trực tiếp http://ideone.com/ungpl30 gold badges172 silver badges210 bronze badges

3

#include <ctype.h> // isspace()

int
nwords(const char *s) {
  if (!s) return -1;

  int n = 0;
  int inword = 0;
  for ( ; *s; ++s) {
    if (!isspace(*s)) {
      if (inword == 0) { // begin word
        inword = 1;
        ++n;
      }
    }
    else if (inword) { // end word
      inword = 0;
    }
  }
  return n;
}

Đã trả lời ngày 2 tháng 10 năm 2012 lúc 22:11Oct 2, 2012 at 22:21

Sehesehejfs

Xem ví dụ sau, bạn có thể làm theo cách tiếp cận: đếm khoảng trắng giữa các từ.185 gold badges950 silver badges1626 bronze badges

bool isWhiteSpace( char c )
{
    if( c == ' ' || c == '\t' || c == '\n' )
        return true;
    return false;
}

int wordCount( char *string )
{
    char *s = string;
    bool inWord = false;
    int i = 0;

    while( *s )
    {
        if( isWhiteSpace(*s))
        {
            inWord = false;
            while( isWhiteSpace(*s) )
                s++;
        }
        else
        {
            if( !inWord )
            {
                inWord = true;
                i++;
            }
            s++;
        }
    }

    return i;
}

Để kiểm tra :Mar 19, 2015 at 14:23

Đầu ra:

#include <stdio.h>
int main()
{
    char str[80];
    int i, w = 0;
    printf("Enter a string: ");
    scanf("%[^\n]",str);

    for (i = 0; str[i] != '\0'; i++)
    {
       
        if((str[i]!=' ' && str[i+1]==' ')||(str[i+1]=='\0' && str[i]!=' '))
        {
            w++;
        }
        
    }

    printf("The number of words = %d", w );

    return 0;
}

Đã trả lời ngày 2 tháng 10 năm 2012 lúc 22:03Jan 31, 2021 at 16:47

Hướng dẫn count word in string c++ - đếm từ trong chuỗi C++

Alerootaleroot

#include <string.h>

int words(const char *s)
{
    const char *sep = " \t\n\r\v\f";
    int word = 0;
    size_t len;

    s += strspn(s, sep);

    while ((len = strcspn(s, sep)) > 0) {
        ++word;
        s += len;
        s += strspn(s, sep);
    }
    return word;
}

69,8K30 Huy hiệu vàng172 Huy hiệu bạc210 Huy hiệu đồngOct 23, 2012 at 21:26

Đã trả lời ngày 2 tháng 10 năm 2012 lúc 22:21William Morris

JFSJFS2 gold badges22 silver badges24 bronze badges

int words(const char sentence[])
{
}
0

386K185 Huy hiệu vàng950 Huy hiệu bạc1626 Huy hiệu Đồng

Đã trả lời ngày 19 tháng 3 năm 2015 lúc 14:235 gold badges40 silver badges65 bronze badges

Đây là một trong những giải pháp. Nó đếm các từ có nhiều khoảng trống hoặc chỉ là không gian hoặc không gian theo sau là từ.Mar 18, 2014 at 10:16

int words(const char sentence[])
{
}
1

Đã trả lời ngày 31 tháng 1 năm 2021 lúc 16:47Apr 18, 2015 at 0:55

0

int words(const char sentence[])
{
}
2

leo.fcx

Đây là một giải pháp khác:2 gold badges20 silver badges37 bronze badges

Đã trả lời ngày 23 tháng 10 năm 2012 lúc 21:26Aug 4, 2015 at 15:46

William Morriswilliam Morris

3,4842 Huy hiệu vàng22 Huy hiệu bạc24 Huy hiệu đồng

int words(const char sentence[])
{
}
3

Ngành công nghiệp đỏNov 7, 2017 at 20:09

4.6975 Huy hiệu vàng40 Huy hiệu bạc65 Huy hiệu Đồngpete

Đã trả lời ngày 18 tháng 3 năm 2014 lúc 10:163 bronze badges

Đã trả lời ngày 18 tháng 4 năm 2015 lúc 0:55

5,8792 Huy hiệu vàng20 Huy hiệu bạc37 Huy hiệu Đồng

int words(const char sentence[])
{
}
4

Đã trả lời ngày 4 tháng 8 năm 2015 lúc 15:46Jan 24, 2019 at 21:58

Tôi đã tìm thấy câu hỏi được đăng sau khi hoàn thành chức năng của mình cho một lớp C tôi đang tham gia. Tôi đã thấy một số ý tưởng tốt từ mã mọi người đã đăng ở trên. Đây là những gì tôi đã đưa ra để trả lời. Nó chắc chắn không súc tích như người khác, nhưng nó hoạt động. Có lẽ điều này sẽ giúp ai đó trong tương lai.

int words(const char sentence[])
{
}
5

Chức năng của tôi nhận được một loạt các ký tự. Tôi sau đó đặt một con trỏ vào mảng để tăng tốc chức năng nếu nó được thu nhỏ. Tiếp theo tôi tìm thấy độ dài của chuỗi để lặp qua. Sau đó, tôi sử dụng độ dài của chuỗi làm vòng tối đa cho vòng 'cho'. Sau đó, tôi kiểm tra con trỏ đang nhìn vào mảng [0] để xem đó là một ký tự hoặc dấu câu hợp lệ. Nếu con trỏ có giá trị thì tăng lên chỉ mục mảng tiếp theo. Bộ đếm từ được tăng lên khi hai thử nghiệm đầu tiên thất bại. Hàm sau đó sẽ tăng lên trên bất kỳ số lượng khoảng trống nào cho đến khi tìm thấy char hợp lệ tiếp theo. Hàm kết thúc khi tìm thấy ký tự NULL '\ 0' hoặc dòng mới '\ n'. Chức năng sẽ tăng một lần cuối cùng ngay trước khi nó thoát để tính đến từ trước null hoặc newline. Chức năng trả về đếm cho chức năng gọi.Jun 27 at 10:42

1

Đã trả lời ngày 7 tháng 11 năm 2017 lúc 20:09

int words(const char sentence[])
{
}
6

petepeteSep 2, 2013 at 20:57

1

693 huy hiệu đồng

int words(const char sentence[])
{
}
7

#include <string.h>
#include <stdio.h>

int words(const char sentence[ ])
{
    int counted = 0; // result

    // state:
    const char* it = sentence;
    int inword = 0;

    do switch(*it) {
        case '\0': 
        case ' ': case '\t': case '\n': case '\r': // TODO others?
            if (inword) { inword = 0; counted++; }
            break;
        default: inword = 1;
    } while(*it++);

    return counted;
}

int main(int argc, const char *argv[])
{
    printf("%d\n", words(""));
    printf("%d\n", words("\t"));
    printf("%d\n", words("   a      castle     "));
    printf("%d\n", words("my world is a castle"));
}
0

Tôi đã có điều này như một nhiệm vụ ... vì vậy tôi biết điều này hoạt động. Hàm cung cấp cho bạn số lượng từ, độ dài từ trung bình, số dòng và số lượng ký tự. Để đếm các từ, bạn phải sử dụng ISSPace () để kiểm tra khoảng trắng. Nếu ISSPACE là 0, bạn biết bạn không đọc khoảng trắng. Wordcount chỉ là một cách để theo dõi các chữ cái liên tiếp. Khi bạn có được một khoảng trắng, bạn đặt lại bộ đếm đó và tăng từ đó. Mã của tôi dưới đây:Jul 8, 2016 at 9:14