请教一道C 的题目!!谢谢!

时间:2008-05-13 15:32:20   来源:论坛整理  作者:  编辑:chinaitzhe
请各位帮我看看这道题目
(我自己做了很久。。总是出现问题)


题目:输入一串字符串,且其中包含有两个字母“a”,编程将第一个"a "字母之前和第二个字母"a "之后的字符连接成一个字符串输出:将两个"a"字母之间的字符作为另一个字符串输出。

我的思路是用循环判定 输入字符串中 有没等于a。有就记录位置。然后再根据位置取字符

谢谢!!
网友回复:假如有大于2个a出现怎么办
网友回复:。。暂时忽略这个情况!!就是只要求只处理 输入中只有两个a 的字符串!!
谢谢!!

网友回复:
引用楼主 h2018 的帖子:

题目:输入一串字符串,且其中包含有两个字母“a”,编程将第一个"a "字母之前和第二个字母"a "之后的字符连接成一个字符串输出:将两个"a"字母之间的字符作为另一个字符串输出。

我的思路是用循环判定 输入字符串中 有没等于a。有就记录位置。然后再根据位置取字符


最多只有两个'a'就简单了,记录每个'a'的位置再取出值不就可以吗?
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



#include <stdio.h>

#include <string.h>



int main()

{

    char p[20] = "123a1312a3424234";

    char mid[20];

    char edge[20];

    int i,j,a1,a2;

    a1 = -1;

    for(i = 0; p[i] != '\0';   i)

    {

        if(p[i] == 'a')

        {

            if(a1 == -1)

                a1 = i;

            else

            {

                a2 = i;

                break;

            }

        }

    }

    if(a1 == -1 || a2 == -1) {

        printf("Input error!");    

        return 0;

    }

    for(j = 0, i = 0; j < a1;   j)

        edge[i  ] = p[j];

    for(j = a2 1; p[j] != '\0';   j)

        edge[i  ] = p[j];

    edge[i] = '\0';

    for(j = a1 1, i = 0; j < a2;   j)

        mid[i  ] = p[j];

    mid[i] = '\0';

    printf("mid: %s\n",mid);

    printf("edge: %s \n",edge);



    return 0;

}


输出:
mid: 1312
edge: 1233424234
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>

#include <string.h>

#define MAXLEN 100

int main()

{

    char Str[MAXLEN];

    printf("Please input the string!\n");

    scanf("%s", Str);



    char *pStrH = strtok(Str, "a");

    char *pStrM = strtok(NULL, "a");

    char *pStrL = strtok(NULL, "\0");

    if(pStrH == NULL || pStrM == NULL || pStrL == NULL)

    {

        printf("Invalid input!");

    }    

    else

    {

        printf("String1:%s%s\n", pStrH,pStrL);

        printf("String2:%s\n", pStrM);

    }

    

    return 0;

}




网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>

#include <stdlib.h>

void main() 

{ 

    int num = 0; 

    char s[256];

    char s1[256];

    char s2[256];

    int index1 = 0;

    int index2 = 0;

    int aTag = 0;

    printf("请输入字串:");

    if(scanf("%s", s) > 0)

    {

        while(num < 256)

        {

            if(s[num] == 'a')

            {

                aTag  ;

                if(aTag == 1 || aTag == 2)

                {

                    num  ;

                    continue;

                }

            }

            if(aTag == 1)

            {

                s2[index2] = s[num];

                index2  ;

            }

            else

            {

                s1[index1] = s[num];

                index1  ;

            }

            num  ;

        }

        if(aTag < 2)

        {

            printf("字串中a的字符少于2个");

            return;

        }

        s1[index1] = s2[index2] = '\0';

        printf("两个a两边的字串 = %s\n", s1);

        printf("两个a之间的字串 = %s\n", s2);

    }

    else

    {

        printf("输入不正确!\n");

    }

    system("pause");

}  




网友回复:
引用 3 楼 c_spark 的回复:
引用楼主 h2018 的帖子:

题目:输入一串字符串,且其中包含有两个字母“a”,编程将第一个"a "字母之前和第二个字母"a "之后的字符连接成一个字符串输出:将两个"a"字母之间的字符作为另一个字符串输出。

我的思路是用循环判定 输入字符串中 有没等于a。有就记录位置。然后再根据位置取字符


最多只有两个'a'就简单了,记录每个'a'的位置再取出值不就可以吗?

C/C code#include <stdio.h>
#include <string.…

忘了给a2也初始化为-1,呵呵...
网友回复:谢谢
Treazy , c_spark

两位的代码都很有特色!小弟学习了!
c_spark 的比较适合菜鸟的我!!!
Treazy 虽然看不怎么懂(strtok 书上没有,还是先学完书上的再扩展),但代码很整洁!!

谢谢两位!!
网友回复:我这个是不用string函数的,
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



#include <iostream>

using namespace std;



int main()

{

#define LENGTH    400



    int        nFount(0);

    char    strOriginal[LENGTH] = {0};

    char    strBfr[LENGTH]        = {0};

    char    strAft[LENGTH]        = {0};

    char    *pStr    = strOriginal;

    char    *pBfr    = strBfr;

    char    *pAft    = strAft;



    cout << "Enter a string ( length<" << LENGTH << " ):";

    gets(strOriginal);



    while(*pStr != '\0')

    {

        if(*pStr == 'a')

        {

            nFount  ;

            if(nFount <= 2)

            {

                pStr  ;

                continue;

            }

        }



        switch(nFount)

        {

            case 1:

                *(pAft  ) = *pStr;

                break;

            default:

                *(pBfr  ) = *pStr;

                break;

        }



        pStr   ;

    }



    if(nFount < 2)

    {

        cout << "string format ERROR." << endl;

    }

    else

    {

        cout << strBfr << endl;

        cout << strAft << endl;

    }

    system("Pause");

    return 0;

}


网友回复:真不好意思!!后面的没给上分。。。
但还是谢谢你们了!!
关键字:请教,一道,题目,谢谢,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面