请教一道C 的题目!!谢谢!
时间:2008-05-13 15:32:20
来源:论坛整理 作者: 编辑:chinaitzhe
(我自己做了很久。。总是出现问题)
题目:输入一串字符串,且其中包含有两个字母“a”,编程将第一个"a "字母之前和第二个字母"a "之后的字符连接成一个字符串输出:将两个"a"字母之间的字符作为另一个字符串输出。
我的思路是用循环判定 输入字符串中 有没等于a。有就记录位置。然后再根据位置取字符
谢谢!!
网友回复:假如有大于2个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"); }
网友回复:
忘了给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 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面