C语言入门-字符串+fflush(stdin)

先来复习一个简单单词吧:

flush(注意只有一个f):冲洗,冲刷,冲掉。  例句:I flushed the toilet and went back to work again.

下面,我们来看看一个简单的函数:fflush(file flush,注意有两个f), 先来看一个简单的程序:

#include <stdio.h>
int main()
{
	char c;

	scanf("%c", &c);
	printf("%d\n", c);
 
	scanf("%c", &c);
	printf("%d\n", c);
	
	return 0;
 
}

运行这个程序,输入1, 并按enter键,结果为:

49
10

不用吃惊,这个结果很正常的,字符1对应的ASCII值刚好为49, enter键对应的ASCII值为10, 所以就有这样的结果呢。可以看出,第二个scanf函数执行了,并从缓冲区中得到了值(其实,这个值不是我们想要的),那么我们如何把缓冲区这个“马桶”里面的值冲掉呢?用fflush函数就可以了。如下:

#include <stdio.h>
int main()
{
	char c;
	scanf("%c", &c);
	printf("%d\n", c);//ASCII值刚好为49
 
	fflush(stdin); // 冲掉“马桶”中的无用值
	scanf("%c", &c);
	printf("%d\n", c);
	
	return 0;
 
}

字符串的删除小练习:由于char ch;当输入字符串为:"adg"  输入删除的字符为:"ad"时, 输出结果为:"dg"只删除了"a" 为什么呢?

#include <stdio.h>


void delete_letter(char str[], char newstr[],char ch);


int main(int argc, char *argv[])
{
	char str[100];
	char ch;
	char newstr[100];

	printf("请输入字符串: ");
	fflush(stdin);//冲掉“马桶”中的无用值
	scanf("%s", str);
	
	printf("请输入要删除的字符: ");
	fflush(stdin);
	scanf("%c", &ch);

	delete_letter(str,newstr,ch);	//调用函数

	puts(newstr);//输出删除字符后的新串printf("%s\n",newstr);

	return 0;
}

void delete_letter(char str[], char newstr[],char ch)
{
	int i=0,j=0;
	
	while (str[i]!='\0')
	{
		if(str[i]==ch)
		{

		i++;
		continue;
	}
	newstr[j++]=str[i++];
		newstr[j]='\0';//标记字符串结束;等价于newstr[j]=0;

	}


	
}

输出字符串中的空格:


#include <iostream>
using namespace std;
 
void deleteAllSpace(char str[])
{
	char *p = str;
	int k = 0;
 
	while('\0' != *p)
	{
		if(' ' != *p)
		{
			str[k++] = *p++; 
		}
		else
		{
			p++;
		}
	}
	
	str[k] = '\0';
}
 
int main()
{
	char str[6][20] =
	{
		"abc",
		"  abc",
		"abc ",
		" a b c ",
		" a  b  c ",
		" a  bcd  e "
	};
 
	int i;
	for(i = 0; i < 6; i++)
	{
		deleteAllSpace(str[i]);
		printf("%s\n", str[i]);
 
	}
 
	return 0;
}

输出非字母与非数字:


#include<stdio.h>
//#include<string.h>
#include<malloc.h>


char  delete_latter(char *str1, char *str2);
char get_number(char *str1,char *str2);

int main (int argc,char*argv[])
{
	char *str1=NULL;
	char *str2=NULL;

	str1=(char*)malloc(20*sizeof(char));
	str2=(char*)malloc(20*sizeof(char));

	printf("请输入字符串:\n");
	gets(str1);

	delete_latter(str1,str2);

	printf("输出删除字母后的新字符串:\n");
	puts(str2);

	get_number(str1,str2);

	printf("输出数字的新字符串:\n");
	puts(str2);

	return 0;
}

char delete_latter(char *str1,char *str2)
{

	while (*str1!='\0')
	{
		if(!((*str1>='a'&&*str1<='z')//!(输出非字母)
			||(*str1>='A'&&*str1<='Z')))
		{	

			*str2=*str1;
			 str2++;
		}

		    str1++;
	}
	*str2='\0';
	return 0;
}

char get_number(char *str1,char *str2)//char str1[],char str2[]
{

    //int i=0;
    //int j=0;

	while(*str1!='\0')//str1[i]!='\n'
	{
		if(*str1>='0'&&*str1<='9')//输出数字
		{
			*str2=*str1;//str2[j]=str1[i]
			str2++;      //j++
		}                                                                                                                                                                                                                                                                                                                                                                                                                     
		str1++;           //i++
	}
	*str2='\0';            //str2[j]='\n'
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 1024

int main(int argc, char *argv[])
{	
	int i,j;
	int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12};
	int*p = NULL;
	int *pt[3] = {NULL};

	for(i = 0; i < 3; i++)
	{
		pt[i] = a[i]; //ʲôӢ˼
	}

	for(i = 0; i < 3; i++)
	{
		for(j = 0; j < 4; j++)
		{
			printf("%-4d", a[i][j]);
		}

		printf("\n");
	}

	//printf("pt[0]=%p pt[1]=%p pt[2]=%p\n", pt[0], pt[1], pt[2]);

	return 0;
}

void output(int a[][4], int n)
{
}
#include <stdio.h>

int getlength(char *str);
int findsite(char *str, char ch);

int main()
{
	char str[100];
	char *p = str;//*p=str
	char ch;

	printf("请输入字符串: ");
	gets(str);	

	printf("字符串长度为:%d\n", getlength(str));

	printf("请输入查找的字符: ");
	scanf("%c", &ch);

	printf("字符%c在字符串%s的位置为%d\n", ch, str, findsite(str, ch));
}

int getlength(char *str)
{
	int i = 0;

	while(*(str+i) != '\0')
		i++;

	return i;
}

int findsite(char *str, char ch)//str[]变*str
{
	int i = 0;

	while(*(str+i) != ch)//str[i]变*(str+i)
	{
		if(*(str+i) == '\0')
			return 0;
		i++;
	}

	return i+1;

}
#include <stdio.h>
//#define N 100
/*int getlength(char str[100])
{
	int i = 0;

	while(str[i] != '\0')
		i++;

	return i;
}*/
int getlength(char *str)
{
	int i=0 ;

	while(*(str+i) != '\0')

		i++;

	return i;
}

void show (char str[100])  
{ 
	char *p;
	p=str; 
	for (p=str;*p!='\0';p++) 
		if (*p>='a' && *p<='z') 
		*p=*p-32;
		
		else if
		(*p>='A' && *p<='Z') 
		*p=*p+32; 
 
}
int main(int argc,char *argv[] ) 
{ 

	char str[100];
	
	gets(str); 

	printf("字符串长度为%d\n", getlength(str));//

	show(str);

	puts(str);
	

	return 0;

}




猜你喜欢

转载自blog.csdn.net/Naiva/article/details/81986642