<pre name="code" class="cpp">#include "stdafx.h" #include <stdio.h> #include <string.h> /* 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序, 若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); /* * Function:stringFilter * Usage:stringFilter(pInputStr,lInputlen,pOutputStr) * ----------------------------------------------------- */ void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) { if (lInputLen<=0) { return ; } int i,a[26]; for (i=0;i<26;i++) { a[i] = 0; //没有出现,赋值为0 } int temp = 0; long lOutputLen = 0; for (i=0;i<lInputLen;i++) { temp = pInputStr[i] - 'a'; a[temp] = a[temp] + 1; //比2大就是有重复了 if (a[temp]==1) { pOutputStr[lOutputLen] = pInputStr[i]; lOutputLen ++; } } pOutputStr[lOutputLen] = '\0'; for (i=0;i<lOutputLen;i++) { printf("%c",pOutputStr[i]); } } int _tmain(int argc, _TCHAR* argv[]) { char pInputStr[1024]; char pOutputStr[1024]; long pInputLen; gets(pInputStr); pInputLen = strlen(pInputStr); stringFilter(pInputStr,pInputLen,pOutputStr); getchar(); return 0; }
/* 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。 void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); */ /* * Function: stringZip * Usage: stringZip(pInputStr, long lInputLen, pOutputStr) * ----------------------------------------------------- */ void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) { if (lInputLen<=0) { return; } int i,j,num; long lOutputLen = 0; char temp; i = 0; while(i<lInputLen) { temp = pInputStr[i]; num = 1; for (j=i+1;j<lInputLen;j++) { if (pInputStr[j] == temp) { num ++; } else { break; } } i = i + num; //下一次开始从不重复的数开始算起 if (num !=1) { pOutputStr[lOutputLen] = '0'+ num; lOutputLen ++; } pOutputStr[lOutputLen] = temp ; lOutputLen ++; } pOutputStr[lOutputLen] = '\0'; for (i=0;i<lOutputLen;i++) { printf("%c",pOutputStr[i]); } }