• 复杂信息表达与处理


    一、一维数组

    由于字符串结束多了‘’。

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin>>a;
    	cout<<a<<endl;
    	int n=sizeof(a);
    	cout<<n<<endl;
    	return 0;
    }
    

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin>>a;
    	cout<<a<<endl;
    	int n=strlen(a);
    	cout<<n<<endl;
    	return 0;
    }
    

    可以看到sizeof和strlen的区别,一个是指所有,一个是指占用。

    #include<iostream>//一维数组和字符串的长度区别
    #include<string.h>
    using namespace std;
    int main()
    {
    	char a[]={'h','e','l','l','o'};
    	int n=sizeof(a);
    	cout<<n<<endl;
        char b[]="hello";
        int m=sizeof(b);
    	cout<<m<<endl;
    	return 0;
    }
    

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	string a;
    	getline(cin,a);
    	cout<<sizeof(a);//得用a.length()才行
    }
    

     二、二维数组

    静态定义

    #include<iostream>
    using namespace std;
    int main()
    {
    	const int m=2,n=3;
    	int a[m*n],b[m][n];
    	int i,j;
    	for(i=0;i<m*n;i++)
    	{
    		a[i]=i+1;
    		cout<<a[i]<<'	';
    	}
    	cout<<endl;
    	int x=1;//初始值
    	for(int j=0;j<m;j++)
    	{
    		for(int k=0;k<n;k++)
    		{
    			b[j][k]=x;
    			x++;
    			cout<<b[j][k]<<'	';
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    二维字符串的长度与输出

    #include<iostream>
    using namespace std;
    int main()
    {
    	char month[3][5]={"Jan","Feb","Mar"};
    	int n=sizeof(month);
    	cout<<n<<endl;
    	cout<<month[1]<<endl;
    	cout<<month[1][0];
    
    	return 0;
    }
    

     

    三、结构体

    这里的date类似于int,而today类似于自己定义的a,b,c。

    #include<iostream>
    using namespace std;
    int main()
    {
    	struct telelist{char name[8];char sex;char num1[5];char
    	 num2[5];}list1[2];//telelist 是新定义的结构体类型,list1是声明的结构体名称
    	 int i;
    	 for(i=0;i<2;i++)
    	 {
    	 	cin>>list1[i].name>>list1[i].sex>>list1[i].num1>>list1[i].num2;
    	 }
    	 for(i=1;i>=0;i--)
    	 {
    	 	cout<<list1[i].name<<"/"<<list1[i].sex<<"/"<<list1[i].num1<<"/"<<list1[i].num2
    	 	<<endl;
    	 }
    	 return 0;
    }
    

    三、枚举

    四、

    (1)

    统计一段文本中字母,空格,数字和其他字符的个数

    #include<iostream>
    using namespace std;
    int main()
    {
    	string str;
    	while(getline(cin,str))//循环输入
    	{
    		int letter=0,space=0,num=0,others=0;
    	    int n=str.length();
    	    for(int i=0;i<n;i++)
    	    {
    	    	if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))
    	    	{
    	    		letter++;
    	    	}
    	    	else if(str[i]==' ')
    	    	{
    	    		space++;
    	    	}
    	    	else if(str[i]>='1'&&str[i]<='9')
    	    	{
    	    		num++;
    	    	}
    	    	else
    	    	{
    	    		others++;
    	    	}
    	    }
    	    cout<<letter<<endl;
    	    cout<<space<<endl;
    	    cout<<num<<endl;
    	    cout<<others<<endl;   
    	}
    	return 0;
    }
    

    (2)

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string line;
    	while(getline(cin,line))
    	{
    		int alpha = 0, space = 0, digit = 0,other = 0;
    		for(auto i:line)
    		{
    			if(isalpha(i))
    			    alpha++;
    			else if (isdigit(i))
    		    	digit++;
    			else if(i==' ')
    			    space++;
    			else
    				other++;
    		}
    		cout<<alpha<<endl<<space<<endl<<digit<<endl<<other<<endl;
    	}
    	return 0;
    }
    

     这里auto这个功能,直接读取了line中的字符串。 

     isalpha判断是否是字母,isdigit判断是否是数字,可以简化判断代码。 

     (3) 

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string line;
    	while(getline(cin,line))
    	{
    		for(auto i:line)
    		{
    		     cout<<i;
    		}
    	}
    	return 0;
    }
    

    五、

     1、

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string text1{"Heavy rains are pushing water levels beyond the limit."};
    	string text2,text3;
    	int k;
    	text2="Sluice gates at three Gorges Dam opened to dischange water.";
    	text3=text1+text2;
    	k=text3.find("Heavy");//返回H所在的位置
    	text3.erase(k,sizeof("Heavy"-1));//由于heavy后有,sizeof求出“heavy”长度是6,所以需要减1,意思是从k位置开始,删除后面5个字符
    	text3.insert(k,"Strong");//从k开始插入
    	cout<<text3<<endl;
    	return 0; 
    	
    }
    

    注意字符串的连接,删除,插入。string 字符串的初始化。

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	string text1{"Heavy rains are pushing water levels beyond the limit."};
    	string text2,text3;
    	int k;
    	text2={"Sluice gates at three Gorges Dam opened to dischange water."};
    	text3=text1+text2;
    	string m="Heavy";
    	k=text3.find(m);
    	text3.erase(k,m.length());
    	text3.insert(k,"Strong");
    	cout<<text3<<endl;
    	return 0; 
    	
    }
    

    改用length求长度  

    #include<iostream>
    #include<string.h>
    using namespace std;
    int main()
    {
    	char text1[]="Heavy rains are pushing water levels beyond the limit.";
    	int k;
    	char text2[]="Sluice gates at three Gorges Dam opened to dischange water.";
    	char text3;
    	//text3=text1+text2;//报错,char无法这样连接 
    	strcat(text1,text2);
    	string m="Heavy";
    	cout<<text1<<endl;
    	return 0; 
    	
    }
    

    可以看到string功能更强大,char就会受限很多,例如插入,删除等。

    五、

    #include<iostream>
    #include<string.h>
    using namespace std;
    struct WordList//定义字典结构体 
    {
        char word[20];//单词
        int freq;//频率 
    };
    
    int main()
    {
    	WordList list[1000];//声明结构体 
    	int N=0;//记录不重复的个数 
    	int i,j,k,s;
    	char tmp[20];//临时的中间变量 
    	WordList box;
    	cin>>tmp;
    	while(strcmp(tmp,"xyz")!=0)
    	{
    		for(i=0;i<N;i++)
    		{
    			if(strcmp(list[i].word,tmp)==0)
    			{
    				list[i].freq++;
    				break;
    			}
    		}
    		if(i>=N)
    		{
    			strcpy(list[i].word,tmp);
    			list[i].freq=1;
    			N++;
    		}
    		cin>>tmp;
    	}
    	cout<<"原始输出:"<<endl; 
    	for(i=0;i<N;i++)
    	 {
    	 	cout<<list[i].word<<"	"<<list[i].freq<<endl;
    	 }
    	//**************排序******************** 
    	 for(j=0;j<N-1;j++)
    	 {
    	 	s=j;//假设最小的下标 
    	 	for(k=j+1;k<N;k++)
    	 	{
    	 		if(list[s].freq>list[k].freq)
    			{
    			 	s=k;//最小的变化 
    		    }  
    	 	}
    	 	box=list[s];//这里只需最后交换,不用每次都交换
    		list[s]=list[j];
    		list[j]=box;
    	 } 
    	 cout<<"排序后输出:"<<endl; 
    	 for(i=0;i<N;i++)
    	 {
    	 	cout<<list[i].word<<"	"<<list[i].freq<<endl;
    	 }
    	 return 0;
    }
    

    注意排序,只需最后交换,不用每次比较完就交换。再有注意char 里的一些函数使用。

    #include<iostream>
    #include<string.h>
    using namespace std;
    struct WordList//定义字典结构体 
    {
        char word[20];//单词
        int freq;//频率 
    };
    
    int main()
    {
        WordList list[2];
    	char a[]="wang";
    	char b[]="zhang";
    	strcpy(list[0].word,a);//复制 
    	list[0].freq=5;
    	strcpy(list[1].word,b);//复制 
    	list[1].freq=3; 
    	int c=strcmp(list[1].word,list[0].word);
    	cout<<c<<endl;
    	return 0;
    }
    

    按照ascall码顺序比较。

      

      

      

      

      

     

      

      

      

      

      

  • 相关阅读:
    error C4430: 缺少类型说明符
    Fiddler 教程
    make: Nothing to be done for 'first'
    Qt Creator + MinGW 在windows 下的调试GDB停止工作解决
    WIN7成功安装Qt4.8方法,无需VS支持
    深入研究 UCenter API For .NET
    C#在Winform程序中显示QQ在线状态
    VS2010 需要缺少的web组件才能加载该项目
    System.Runtime.InteropServices.COMException: 检索 COM 类工厂中 CLSID 为 {0002E510-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80040154
    c#while循环注意continue的地方
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/8679227.html
Copyright © 2020-2023  润新知