簡體   English   中英

C-更改strtok以合並strcmp后無輸出打印

[英]C - No output printing after changing strtok to incorporate strcmp

我的意圖是創建一個比較標記phrases的循環。 如果該短語是唯一的(與其他任何短語都不相同),則將其打印;如果該短語不是唯一的,則tally增加一,並且不會打印重復的短語。 因此,每個短語僅打印一次,以后我將添加代碼以顯示每個短語被計數了多少次。

程序編譯無錯誤,並且在運行時沒有輸出,程序結束並退出。 功能filter_spacesupper_case工作正常,並且它沒有前我改變打印短語for (token = strtok(string, strip); token; token = strtok(NULL, strip))for環路。

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

    void filter_spaces(char* string);
    void upper_case(char string[]);

    int main(){

        char c, string[201];
        int i = 0, k=0, j=0;
        char strip[] = ",.:;?!";
        char* phrases[1000];
        int tally = 0;


        printf("What gibberish shall I parse?\n");

        while((c = getchar()) != EOF)  //while loop for getting characters from stdin

            string[i++] = c;
            string[i] = '\0';  //insert NULL at end of string
            filter_spaces(string);
            upper_case(string);
            char *phrase = strtok(string, strip);

            puts("\nThe phrases entered are: ");

            /*for (token = strtok(string, strip); token; token = strtok(NULL, strip))
              {
                puts(token);
              }
             */

            while(phrase != '\0')
            {
                phrases[i++] = strdup(phrase);
                phrase = strtok(NULL, strip);

            for(k=0; k<i-1; k++)
             {
                for(j = k+1; j<k; j++)
                {
                    if(strcmp(phrases[k], phrases[j])==0)
                    {
                        tally = tally++;  //add to phrases[k] count
                    }
                    else
                    {
                        printf("<%s>\n", phrase); //print and continue on
                    }                       
                 }
              }
           } 

    return 0;
    }
    void upper_case(char string[])
    {
      int c = 0;

      while (string[c] != '\0')
      {
        if (string[c] >= 'a' && string[c] <= 'z')
        {
          string[c] = string[c] - 32;
         }
         c++;
      }
    }

    void filter_spaces(char* string)
    {
      int i,x;
      for(i=x=1; string[i]; ++i)
        if(string[i]!=' ' || string[i+1]!=' ')
          string[x++] = string[i];
      string[x] = '\0';
    }

您的程序無法正常運行,因為您沒有正確關閉while循環。 嘗試這個:

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

void filter_spaces(char* string);
void upper_case(char string[]);

int main()
{
    char c, string[201];
    int i = 0, k = 0, j = 0;
    char strip[] = ",.:;?!";
    char* phrases[1000];
    int tally = 0;

    printf("What gibberish shall I parse?\n");

    while((c = getchar()) != EOF)  //while loop for getting characters from stdin
        string[i++] = c;

    string[i] = '\0';  //insert NULL at end of string
    filter_spaces(string);
    upper_case(string);
    char *phrase = strtok(string, strip);

    puts("\nThe phrases entered are: ");

    /*
    for (token = strtok(string, strip); token; token = strtok(NULL, strip))
    {
        puts(token);
    }
    */

    while(phrase != '\0')
    {
        phrases[i++] = strdup(phrase);
        phrase = strtok(NULL, strip);
    }

    for(k=0; k<i-1; k++)
    {
        for(j = k+1; j<k; j++)
        {
            if(strcmp(phrases[k], phrases[j])==0)
            {
                tally = tally++;  //add to phrases[k] count
            }
            else
            {
                printf("<%s>\n", phrase); //print and continue on
            }                       
        }
    }

    return 0;
}

void upper_case(char string[])
{
    int c = 0;

    while (string[c] != '\0')
    {
        if (string[c] >= 'a' && string[c] <= 'z')
        {
            string[c] = string[c] - 32;
        }
        c++;
    }
}

void filter_spaces(char* string)
{
    int i,x;
    for(i=x=1; string[i]; ++i)
        if(string[i]!=' ' || string[i+1]!=' ')
            string[x++] = string[i];
    string[x] = '\0';
}

希望對您有幫助。 您重復計算並打印唯一字符的邏輯是錯誤的。

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

void filter_spaces(char* string);
void upper_case(char string[]);

int main()
{
    char c, string[201];
    int i = 0, k = 0, j = 0;
    char strip[] = " ,.:;?!";
    char* phrases[1000];
    int tally = 0;

    printf("What gibberish shall I parse?\n");

    while((c = getchar()) != '\n')  //while loop for getting characters from stdin
        string[i++] = c;

    string[i] = '\0';  //insert NULL at end of string
    filter_spaces(string);
    upper_case(string);
    char *phrase = strtok(string, strip);

    puts("\nThe phrases entered are: ");

    /*
    for (token = strtok(string, strip); token; token = strtok(NULL, strip))
    {
        puts(token);
    }
    */

    i=0;    
    while(phrase != '\0')
    {
        phrases[i] = strdup(phrase);

        int flag=0;
        for(k=0; k<i; k++)
        {
           if(strcmp(phrases[k], phrase)==0)
           {
                tally = tally++;  //add to phrases[k] count
                flag=1;
                break;
           }
        }
        if(flag==0)
        {       
           printf("**** %s \n", phrase); //print and continue on
        }
        phrase = strtok(NULL, strip);
        ++i;
    }
    printf("Total Number of repeated Words = %d\n",tally);

    return 0;
}

void upper_case(char string[])
{
    int c = 0;

    while (string[c] != '\0')
    {
        if (string[c] >= 'a' && string[c] <= 'z')
        {
            string[c] = string[c] - 32;
        }
        c++;
    }
}

void filter_spaces(char* string)
{
    int i,x;
    for(i=x=1; string[i]; ++i)
        if(string[i]!=' ' || string[i+1]!=' ')
            string[x++] = string[i];
    string[x] = '\0';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM