C语言中的字符串问题

时间:2016-09-25 20:18:08

标签: c

这是我正在尝试使用Strings的程序 猪拉丁语翻译只是取一个“单词”的第一个字母,并将该字母附加到单词的末尾,并将“ay”添加到结尾

我遇到问题m1 = m2 + 3(重置初始标记)。

我正在给予的输入:" Alex,你是对的"

我期待的输出是:lexay,owhay reay ouyay ightray

但是

我得到了这个:lex,Aay way ay ayo gayi

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

void initialize(char english[], char piglatin[]);
void readinput (char english[]);
int countwords(char english[]);
void convert ( int words, char english[], char piglatin[]);
void writeoutput( char piglatin[]);


int main()
{
    char english[80], piglatin[80];
    int words;

    initialize(english, piglatin);
    printf("enter the string\t");
    fflush(stdin);
    gets(english);
    printf ("\nInput buffer contents:  %s\n", english);
    words = countwords(english);
    convert(words,english,piglatin);
    writeoutput(piglatin);
    printf ("Have a nice day\n");
}

void initialize(char english[], char piglatin[])
{
    int count;
    for(count =0; count<80;++count)
    {
        english[count]=piglatin[count]=' ';

    }
    return;
}

/* Scan the english test and determine the number of words */
int countwords(char english[])
{
    int count, words =1;
    for ( count =0;count <79;++count)
    {
        if(english[count]==' ' && english[count+1]!=' ')
        ++words;

    }
    printf("%d\n",words);
    return (words);
}

/* convert each words in to piglatin*/

void convert ( int words, char english[], char piglatin[])
{
    int n, count;
    int m1=0;
    int m2;

    /* convert each word */
    for ( n=1;n<=words;++n)
    {
        /* locate the end of the current word*/
        count = m1;
        printf ("\ before conversion word contents:  %d\n", count);
        while ( english[count]!=' ')
        {
            m2=count++;
        }
        printf ("\ before conversion word contents:  %d\n", m2);
            /* transpose the first letter and add 'a', 'y'*/
        for (count =m1;count<m2;++count)
        {
            piglatin[count+(n-1)]=english[count+1];
        }
        piglatin[m2+(n-1)] = english[m1];
        piglatin[m2+1] = 'a';
        piglatin[m2+2] = 'y';
        m1=m2+3;
        printf ("\ Converted word contents:  %s\n", piglatin);

    }
    return;
}

void writeoutput( char piglatin[])
{
    int count =0;
    for (count =0; count <80; ++count)
    {
        putchar(piglatin[count]);
    }
    printf ("\n");
    return;
}

1 个答案:

答案 0 :(得分:0)

我在这里看到各种问题:

  1. Alex - &gt; lex,Aay:在确定单词结尾时应检查标点符号,从而在逗号字符前面插入Aay部分
  2. Alex - &gt; lex,Aay:从一个单词的开头开始的每个字符都应该转换为小写,并且所得到的第一个字符应该分别转换为大写字母
  3. 现在转换功能:我已经改变了一点让你开始;它现在应该工作(至少它与您的测试字符串一起工作),而不考虑1和2,但

    void convert(int words, char english[], char piglatin[])
    {
        int estart = 0;
        int ppos = 0;
        int m2;
    
        for (int n = 0; n < words; n++)
        {
            //locate the start of the current word, to make 
            //sure something like this is converted:
            //"Alex,       how are you"
            while (english[estart] == ' ')
            {
                //make sure we do not exceed the strings boundaries!
                if (english[estart] == '\0')
                {
                    return;
                }
                estart++;
            }
            //locate the end of the word 
            int eend = estart;
            while (english[eend] != ' ')
            {
                //never forget to check for the end of the string
                if (english[eend] == '\0')
                {
                    break;
                }
                eend++;
            }
            /* transpose the first letter and add 'a', 'y'*/
            for (int i = estart+1; i < eend; i++, ppos++)
            {
                piglatin[ppos] = english[i];
            }
            piglatin[ppos++] = english[estart];
            piglatin[ppos++] = 'a';
            piglatin[ppos++] = 'y';
            //dont forget to add a whitespace or your string might behave         
            //very stangely!
            piglatin[ppos++] = ' ';
            estart = eend;
    
            printf("\ Converted word contents:  %s\n", piglatin);
        }
    }
    
  4. 我希望这能让你开始朝着正确的方向前进。

    还请检查您的阵列大小是否有英文和明白。 Piglatin的字符串总是比英文字符串长,但你的数组大小是相同的!另外,我建议你添加一些边界检查,以确保不离开数组边界。