实验八 字符串

1.编写程序,从键盘上输入一个字符串(少于80个字符),对字符串中的内容以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍存放在字符数组xx中。

例如:原文:You HeMe,则结果: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;
}
发布了57 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ao_mike/article/details/103146655