/*
返回在两字符串中第一个相同的子串(大于1个字符),并将子串输出
比如:
输入
adbAFEHHFS
acwfagAFEf
输出为
AFE
注:代码过于复杂,求精简~~~
*/
#include <stdio.h>
#include <string.h>
int main()
{
char ch[20];
char ch1[20];
char ch_sub[3];
scanf("%s%s",ch,ch1);
int i=0;
char *p_ch1 = NULL;
char *p_ch = NULL;
int len_ch1 = strlen(ch1);
for (i = 0; i < len_ch1-1; i++)
{
strncpy(ch_sub,ch1+i,2);
ch_sub[2]='\0';
p_ch = strstr(ch,ch_sub);
p_ch1 = strstr(ch1,ch_sub);
if (p_ch==NULL)
continue;
while (*p_ch == *p_ch1)
{
printf("%c",*p_ch);
p_ch1++;
p_ch++;
}
break;
}
return 0;
}
//三个字符串的大小比较
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char ch1[50];
char ch2[50];
char ch3[50];
scanf("%s%s%s",ch1,ch2,ch3);
char temp[50];
if(strcmp(ch1,ch2)>0)
{
strcpy(temp,ch2);
strcpy(ch2,ch1);
strcpy(ch1,temp);
}
if(strcmp(ch2,ch3)>0)
{
strcpy(temp,ch2);
strcpy(ch2,ch3);
strcpy(ch3,temp);
}
if(strcmp(ch1,ch2)>0)
{
strcpy(temp,ch1);
strcpy(ch1,ch2);
strcpy(ch2,temp);
}
printf("%s %s %s",ch1,ch2,ch3);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char ch1[10];
char ch2[10];
char ch3[10];
scanf("%[^\n]",ch1);
getchar();
scanf("%[^\n]",ch2);
getchar();
scanf("%[^\n]",ch3);
char *p_min = ch1;
char *p_middle = ch2;
char *p_max = ch3;
if (strcmp(ch1,ch2)<0)
{
if (strcmp(ch1,ch3)<0)
{
p_min = ch1;
p_middle = (strcmp(ch2,ch3)<0)? ch2:ch3;
p_max = (strcmp(ch2,ch3)>0)? ch2:ch3;
}
else
{
p_min = ch3;
p_middle = ch1;
p_max = ch2;
}
}
else
{
if ((strcmp(ch2,ch3)<0))
{
p_min = ch2;
p_middle = (strcmp(ch1,ch3)<0)? ch1:ch3;
p_max = (strcmp(ch1,ch3)>0)? ch1:ch3;
}
else
{
p_min = ch3;
p_middle = ch2;
p_max = ch1;
}
}
printf("%s %s %s",p_min,p_middle,p_max);
return 0;
}
/*
找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)
比如:
输入:1 5 27 33 24 1 27 18 19 20
输出:
1 27
*/
#include <stdio.h>
int main()
{
int a[10],b[10];
int i,j;
int num;
int count;
int len = sizeof(a)/sizeof(a[0]);
for (i = 0; i < len; i++)
{
scanf("%d",&a[i]);
}
for (i = 0; i < len; i++)
{
num = a[i];
count = 0;
for (j = i; j < len; j++)
{
if (num == a[j]) {
count++;
}
}
b[i] = count;
//printf("%d ***",b[i]);
}
int max_count = b[0];
for (i = 0; i < len; i++)
{
if (b[i]>max_count)
{
max_count = b[i];
}
}
for (i = 0; i < len; i++)
{
if (max_count == b[i]) {
printf("%d ",a[i]);
}
}
return 0;
}
1. 340003
定义一个整型变量c,将其初始化,判断是否是数字。输出Y或N,并将其输出注意输入使用scanf输入
比如:
输入 23 输出为Y
输入 D 输出为N
/*
求一个字符串s的最大连续递增数字子串。
比如:
输入
f123fffwf3210abcd
输出为
123
输入
abcd765bbw1357f123
输出为
123*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char ch[50];
scanf("%s",ch);
char max[10]={0};
char reference[10]={0};
int count ;
int i = 0;
int flag = 0;
while (ch[i]!='\0')
{
count = 1;
//连续两个递增数字,循环得到该位置的连续递增数字
while (isdigit(ch[i])&&isdigit(ch[i+1])&&(ch[i+1]==ch[i]+1))
{
flag = 1;
count++;
i++;
}
if (flag) {
//参照数组置空,并将获得的递增数字传入
memset(reference,'\0',strlen(reference));
strncpy(reference,ch+i-count+1,count);
printf("%s\n",reference);
//参照数组与最大值数组比较,取较大值
if( atoi(reference) > atoi(max) )
{
memset(max,'\0',strlen(max));
strncpy(max,ch+i-count+1,count);
}
printf("%s\n",max);
flag =0;
}
i++;
}
printf("%s",max);
return 0;
}
/*求一个字符串的最大连续递减字母子串。
比如:
输入
f123fed2wf3210abcd
输出为
fed
输入
abcd765bca1357f123
输出为
bca
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char ch[50];
scanf("%s",ch);
char reference[20]={'\0'},max[20]={'\0'};
int count,flag;
int i = 0;
while (ch[i]!='\0') {
flag = 0;
count = 1;
while (isalpha(ch[i]) && isalpha(ch[i+1]) && ch[i]==ch[i+1]+1) {
count++;
i++;
flag = 1;
}
if (flag) {
memset(reference,'\0',20);
strncpy(reference,ch+i-count+1,count);
if (strlen(reference)>strlen(max)) {
memset(max,'\0',20);
strcpy(max,reference);
}
}
i++;
}
printf("%s",max);
return 0;
}
/*
自定义mystrcpy()
考虑内存重叠情况
*/
#include <stdio.h>
#include <string.h>
char *mystrcpy(char *dest,char *src)
{
char *d = dest;
char *s = src;
int count = 0;
assert(dest);//判断指针是否为空,为空,则return 0,结束函数
assert(src);
if (dest == src) {
return src;
}
int count = strlen(src)+1;//整个拷贝长度,包括\0
if (count==1) {
return 0;
}
if (dest < src||dest>src+count)
{
while (count--) {
}
}
}
int main()
{
char s1[] = "sdfsafads";
char s2[50];
mystrcpy(s2,s1);
return 0;
}
/*
输入两个字符串,以第二个字符串整体作为分割条件把第一个字符串进行分割,然后输出分割之后的单词。
此种方法错误:
输入:nice:to::meet::you:lucy! you
输出:nice:t ::meet:: :l c !
strtok(you) 只能分割单个字符,会将存在‘y’ 'o' 'u'的地方都分割开来
*/
#include <stdio.h>
#include <string.h>
int main()
{
char ch[50];
char ch1[20];
scanf("%s%s",ch,ch1);
char *p = strtok(ch,ch1);
while (p!=NULL)
{
printf("%s ",p);
p = strtok(NULL,ch1);
}
return 0;
}