字符串练习
#include <stdio.h>
//"hello:,:,:world:qian:feng"
//char *my_strtok(char *string, const char *demi)
//{
// static char *token;
// char *str;
// if (string) {
// str = string;
// }
// else
// {
// str = token;
// }
//
// while (*str) {
// if (strchr(demi, *str)) {
// str++;
// }
// else
// {
// break;
// }
// }
// string = str;
//
// while (*str) {
// if (strchr(demi, *str)) {
// *str++ = '\0';
// break;
// }
// str++;
// }
// token = str;
//
// if (str==string) {
// return NULL;
// }
// return string;
//}
//int main(int argc,const char *argv[])
//{
// char str[100]="hello:,world:qian:feng";
// char *pstr = str;
// while ((pstr = my_strtok(pstr, ":,"))) {
// printf("%s\n",pstr);
// pstr = NULL;
// }
// return 0;
//}
//字符串排序。比较三个字符串的大小,然后按从小到大的顺序将字符串输出。
//比如:
//输入
//asdfwd
//ddrwf
//ffweff
//输出为
//asdfwd
//ddrwf
//ffweff
//
//输入
//sgfgeasdfw
//aabbe
//wrwwdfaf
//输出为
//aabbe
//sgfgeasdfw
//wrwwdfaf
/*#include <stdlib.h>
#include <string.h>
int main(int argc,const char *argv[])
{
char *pstr[10]={NULL};
int cnt = 0;
for (int i=0; i<10; i++) {
pstr[i] = calloc(100, 1);
if (!pstr[i]) {
return -1;
}
scanf("%s",pstr[i]);
cnt++;
if (getchar()=='\n') {
break;
}
}
//排序指针数组
for (int i=0; i<cnt-1; i++) {
for (int j=0; j<cnt-i-1; j++) {
if (strcmp(pstr[j],pstr[j+1])>0) {
char *temp = pstr[j];
pstr[j]=pstr[j+1];
pstr[j+1]=temp;
}
}
}
//打印输出
for (int i=0; i<cnt; i++) {
printf("%s\n",pstr[i]);
}
return 0;
}
*/
//字符串原地压缩。题目描述:“eeeeeaaaff" 压缩为 "e5a3f2"。
//字符串压缩算法,把s字符串压缩处理后结果保存在res中
//
//比如:
//输入
//"aaaaeefggg"
//输出为
//a4e2f1g3
//
//输入
//hhfhhhhfm
//输出为
//h2f1h4h2
/*int main(int argc,const char *argv[])
{
char str[100]={};
char buf[100]={};
scanf("%s", str);
char *pstr = str;
int cnt = 1;
int len=0;
while (*pstr) {
if (*pstr==*(pstr+1)) {
cnt++;
}
else
{
len+=sprintf(buf+len, "%c%d",*pstr,cnt);
cnt=1;
}
pstr++;
}
printf("%s\n", buf);
return 0;
}*/
//字符串原地压缩。题目描述:"e5a3f2" 解压缩为 “eeeeeaaaff"。
//字符串压缩算法,把s字符串压缩处理后结果保存在res中
//
//比如:
//输入
//a4e2f1g3
//输出为
//aaaaeefggg
//
//输入
//h21f1h4h2
//输出为
//hhfhhhhff
#include <ctype.h>
#include <stdlib.h>
/*int main(int argc,const char *argv[])
{
char str[100]={};
char *buf=NULL;
char ch[100]={};
int count[100]={};
char *pstr = str;
scanf("%s",str);
int len=0;
while (*pstr) {
sscanf(pstr, "%c%d",&ch[len],&count[len]);
pstr++;
while (isdigit(*pstr)) {
pstr++;
}
len++;
}
int sum =0;
for (int i=0; i<len; i++) {
sum+=count[i];
}
buf = (char *)malloc(sum);
int cnt=0;
for (int i=0; i<len; i++) {
for (int j=0; j<count[i]; j++) {
buf[cnt++]=ch[i];
}
}
printf("%s\n",buf);
return 0;
}*/
//求一个字符串s的最大连续递增数字子串。
//
//
//比如:
//输入
//f123fffwf3212789:abcd
//输出为
//123
//
//输入
//abcd765bbw1357f123
//输出为
//123
//int main(int argc,const char *argv[])
//{
// char str[200]={};
// char *pmax=NULL;
// int maxLen=0;
//
// int cnt=0;
// scanf("%s",str);
// char *pstr = str;
//
// while (*pstr) {
// if (isdigit(*pstr)) {
// cnt=1;
// while ((*pstr == *(pstr+1)-1) && isdigit(*(pstr+1))) {
// cnt++;
// pstr++;
// }
// if (maxLen < cnt) {
// maxLen = cnt;
// pmax = pstr-maxLen+1;
// }
// }
// pstr++;
// }
// if (pmax) {
// *(pmax+maxLen)='\0';
// printf("%s\n",pmax);
// }
// return 0;
//}
//输入一段字符串,把相同的字符按出现顺序,归在一起,并压缩
//比如:
//输入 SamSameCome
//SSamameCome
//SSaammeCome
//SSaammmeCoe
//SSaammmeeCo
//输出:
//SSaammmeeCo
//S2a2m3e2C1o1
//
//输入 ComeTomeTCoe
//输出:
//CCooommeeeTT
//C2o3m2e3T2
#include <string.h>
int main(int argc,const char *argv[])
{
char str[100]={};
scanf("%s",str);
char *pstr = str;
while (*pstr) {
char *ptemp = pstr+1;
for (int i=0; *ptemp; i++) {
if (*pstr == *ptemp) {
memmove(pstr+2, pstr+1, ptemp-pstr-1);
*(pstr+1)=*pstr;
}
ptemp++;
}
pstr++;
}
printf("%s\n",str);
return 0;
}
posted on 2014-02-04 21:49 Sinner_Yun 阅读(366) 评论(0) 编辑 收藏 举报