1.编写程序,从键盘上输入一个字符串(少于80个字符),对字符串中的内容以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍存放在字符数组xx中。
例如:原文:You He,Me,则结果:Me He You
**【思考】对其中单词进行排序,程序怎样修改?
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char xx[80];
int j,k,s,m,strl;
char str[80];
printf("请输入一个少于80个字符的字符串:");
gets(xx);
strl=strlen(xx);
s=k=0;
for(j=strl-1;j>=-1;j--)
{
if(isalpha(xx[j]))
k++;
else
{
for(m=1;m<=k;m++)
str[s++]=xx[j+m];
k=0;
}
if(!isalpha(xx[j]))
str[s++]=' ';
}
str[s]='\0';
strcpy(xx,str);
printf("结果:%s\n",xx);
return 0;
}
#include<stdio.h>
#include<ctype.h>//字符分类函数头文件
#include<string.h>
int main()
{
char xx[80];
int j,k,s,m,strl;
char str[80];
printf("请输入一个少于80个字符的字符串:");
gets(xx);
strl=strlen(xx);//把xx实际长度赋值给strl
s=k=0;
for(j=strl-1;j>=-1;j--)//输题,strl=11;
{
if(isalpha(xx[j]))//isalpha是否为字母
k++;
else
{
for(m=1;m<=k;m++)
str[s++]=xx[j+m];//把xx的结果赋值给str;
k=0;
}
if(!isalpha(xx[j]))
str[s++]=' ';//去除标点符号
}
str[s]='\0';//令最后一个字符为零字符
strcpy(xx,str);//str复制给xx
printf("结果:%s\n",xx);
return 0;
}
2.编写程序,实现从字符串删除指定的字符,字母区分大小写。
#include<stdio.h>
#include<string.h>
int main()
{
char s[81],ch;
int i;
printf("输入字符串:");
gets(s);
printf("输入要删除字符");
ch=getchar();
for(i=0;s[i]!='\0';)
{
if(s[i]==ch)
strcpy(s+i,s+i+1);
else i++;
}
puts(s);
return 0;
}
#include<stdio.h>
#include<string.h>
int fun(char a[],char c)
{
int i,j,t;
for(i=0;i<strlen(a);) //原程序i++,则有一部分无法替换。而且strlen(a)也并非定值。
{
if(a[i]==c)
{
for(j=i;j<=strlen(a);j++)
a[j]=a[j+1];
continue;
}
++i; //只有当是字符c的时候i才能自加,如果是则i保持不变。
}
return 0;
}
int main()
{
char str[80];
char ch;
gets(str);
scanf("%s",&ch); //这里建议用%s,可以忽略后面的回车。
fun(str,ch);
printf("%s\n",str);
return 0;
}
5.编写程序,将两个字符串连接起来,不要用strcat函数。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n 请输入第一个字符串:");
scanf("%s",s1);
printf("\n 请输入第一个字符串:");
scanf("%s",s2);
while(s1[i]!='\0')
{
i++;
}
while(s2[j]!='\0')
{
s1[i++]=s2[j++];
s1[i]='\0';
}
printf("\n连接后的字符串:%s\n",s1);
}
#include <stdio.h>
#include <string.h>
int main()
{
int i, j, k, m;
char str1[20]={"Hello, "};
char str2[]={"world!"};
j=strlen(str1);
k=strlen(str2);
for (i=j, m=0; i<j+k && m<k; i++)
str1[i]=str2[m++];
puts(str1);
return 0;
}
#include <stdio.h>
int main()
{
char a[20]="How do you ", b[5]="do";
for (int i=0; i<20 && a[i]; i++);
for (int j=i, k=0; k<5; a[j++]=b[k++]);
puts(a);
return 0;
}
10.输入一个字符串(少于80个字符),统计其中小写字母、大写字母和数字字符分别有多少个?(要求使用字符处理函数)
#include<stdio.h>
int main()
{
int abc = 0;
int ABC = 0;
int num = 0;
char str[80];
int i;
printf("请输入要统计的字符串:");
gets(str);
for(i=0;str[i]!='\0';i++)
{
if (str[i]>= 'a'&&str[i]<= 'z')
abc++;
else if (str[i]>= 'A'&&str[i]<= 'Z')
ABC++;
else if (str[i]>= '0'&&str[i]<= '9')
num++;
}
printf("小写字母的数量:%d\n",abc);
printf("大写字母的数量:%d\n",ABC);
printf("数字的数量:%d\n",num);
}
4.有一篇文章,共有3行文字,每行最多有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
#include<stdio.h>
int main()
{
char c[3][80];
int i,j,daxie=0,xiaoxie=0,shuzi=0,kongge=0,qita=0;
printf("请输入第1行:\n");
gets(c[0]);
puts(c[0]);
printf("请输入第2行:\n");
gets(c[1]);
puts(c[1]);
printf("请输入第3行:\n");
gets(c[2]);
puts(c[2]);
for(i=0;i<3;i++)
{
for(j=0;j<8&&c[i][j]!='\0';j++)
{
if(c[i][j]==' ')kongge++;
else if((c[i][j]>='0')&&(c[i][j]<='9'))shuzi++;
else if((c[i][j]>='A')&&(c[i][j]<='Z'))daxie++;
else if((c[i][j]>='a')&&(c[i][j]<='z'))xiaoxie++;
else qita++;
}
}
printf("大写:%d\n小写:%d\n数字:%d\n空格:%d\n其他:%d\n",daxie,xiaoxie,shuzi,kongge,qita);
return 0;
}
3.从键盘上输入下字符串,把字符串中的所有字符左循环移m个位置。
#include<stdio.h>
#include<string.h>
int main()
{
char a[15],b[15];
scanf("%s", a);
int m = strlen(a);
int n;
scanf("%d",&n);
int i,j=0;
for(i= n;i<m;i++)
{
b[j] = a[i];
j++;
}
for(i=0;i<n;i++)
{
b[j]=a[i];
j++;
}
for(i=0;i<j;i++)
printf("%c",b[i]);
return 0;
}
7.输入5个字符串,输出其中最小的字符串。
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0;
char s[80] = {""}, min[80] = {""};
printf("输入五个字符串:\n");
scanf("%s",s);
strcpy(min,s);
for(i=0; i<4; i++)
{
scanf("%s",s);
if( strcmp(min,s)>0 )//字符串比较
strcpy(min,s);//拷贝函数
}
printf("最小的字符串是:%s \n",min);
return 0;
}
8.输入5个字符串,输出其中最长的字符串。
#include <stdio.h>
#include <string.h >
int main()
{
int i = 0;
char s[80] = {""}, max[80] = {""};
printf("输入五个字符串:\n");
scanf("%s",s);
strcpy(max,s);
for(i=1; i<5; i++)
{
scanf("%s",s);
if( strcmp(max,s)<0 )
strcpy(max,s);
}
printf("最大的字符串是:%s \n",max);
return 0;
}
9.输入5 个字符串并将这5 个字符串从大到小排序后输出。
#include "stdio.h"
#include <string.h>
#include <stdlib.h>
#define MAX 10
int main()
{
int i,j;
char str[5][MAX] = {0};
//char s[5];
printf("请输入5个字符串!\n");
for(i = 0;i<5;i++)
{
scanf("%s",str[i]);
}
printf("\n");
for(j = 0;j<4;j++)
{
for (i = 0; i< 4-j;i++)
{
if(strcmp(str[i],str[i+1])< 0)
{
char temp[MAX] = {0};//还得初始化
strcpy(temp,str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],temp);
//temp = str[i];
//str[i] = str[i+1];
//str[i+1] = temp;
}
}
}
for(i = 0;i<5;i++)
{
printf("%s\n",str[i]);
}
}
11.不使用函数strcpy,实现将字符串复制。
#include<stdio.h>
#include<string.h>
int main()
{
char str1[20];
char str2[20];
int i=0;
puts("请输入字符串str1:");
gets(str1);
puts("请输入字符串str2:");
gets(str2);
while(str1[i]!=0)
{
str2[i]=str1[i];
i++;
}
str2[i]='\0';//保证最后一个字符为零字符
printf("字符串str2:%s\n",str2 );
}
#include<stdio.h>
int main()
{
char s1[20],s2[]="good morning!";
int i=0;
while((s1[i]=s2[i++])!='\0');
printf("%s\n",s1);
}
12.不使用函数strcmp,实现将字符串的比较。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[10], s2[10];
gets(s1);
gets(s2);
int i;
for (i = 0; (s1[i] != '\0') && (s2[i] != '\0'); i++)
if (s1[i] == s2[i]) {
continue;
} else {
break;
}
printf("%d\t", s1[i] - s2[i]);
return 0;
}