【算法练习】变量大小/基础知识/注意事项/输入输出

 

目录

变量基本类型及其大小

输入输出

字符串输入输出

C++如何输入含空格的字符串

string 字符串操作

 字符数组转化成string类型 

 将string类型转换为字符数组 

判断字符串是否为空

检查字符串是否升序

字符数组分割

输入空行结束

sscanf

字符串的比较(string和char[] )

STL注意和常用函数

map find

数学相关公式和模板

组合数学


变量基本类型及其大小

 

整形 int   2^31    30→3*3→  十进制9个0  

              十进制9个0 -> 9/3=3  30   约为2^30

                2^63    60→ 6*3→十进制18个0    [大概]

输入输出

字符串输入输出

C++如何输入含空格的字符串

 

①cin是C++中最常用的输入语句,当遇到空格或者回车键即停止

②若定义变量为string类型,注意不是字符型数组。则要考虑getline()函数。用法如下:

int main()

{ string st;

getline(cin,st);

cout<<st<<endl;

 return0;

}

③若定义变量为字符型数组

cin.getline (char *str, int maxnum)(包含头文件#include <string>)

cin.getline()函数可以同cin.get()函数类似,也可接收空格,遇回车结束输入。

int main()

{

         char st[50];

        cin.getline(a,50);

        cout<<a<<endl; // 输出也可以用printf("%s",st);

        return0;

string 字符串操作

 字符数组转化成string类型 

char ch [] = "ABCDEFG";

string str(ch);//也可string str = ch;

或者

char ch [] = "ABCDEFG";

string str;

str = ch;//在原有基础上添加可以用str += ch;

 将string类型转换为字符数组 

char buf[10];

string str("ABCDEFG");

length = str.copy(buf, 9);

buf[length] = '\0';

或者

char buf[10];

string str("ABCDEFG");

strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);


判断字符串是否为空

①string  直接调用empty()方法

② 字符数组  if(str[0]=='\0') break;


检查字符串是否升序

bool flag=false;
        int len=strlen(str);
        for(i=1;i<len;i++){
            if(str[i]<=str[i-1])
            {
                flag=true;  //证明不是升序
                break;
            }
  }
           

字符数组分割

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

下面是 strtok() 函数的声明。

char *strtok(char *str, const char *delim)

参数

  • str -- 要被分解成一组小字符串的字符串。
  • delim -- 包含分隔符的 C 字符串。

用法:

#include <string.h>
#include <stdio.h>
 
int main () {
   char str[80] = "This is - www.runoob.com - website";
   const char s[2] = "-";
   char *token;
   
   /* 获取第一个子字符串 */
   token = strtok(str, s);
   
   /* 继续获取其他的子字符串 */
   while( token != NULL ) {
      printf( "%s\n", token );
    
      token = strtok(NULL, s);
   }
   
   return(0);
}

输入空行结束

 char tmp;
 char str[300];
    while(cin.getline(str,300))  // 输入以空行结束这样进行判断
    {
        if(str[0]=='\0') break;
      //....
    }

sscanf

从字符串中读入各种类型的数据,也可以用于将字符串转换成整数

  sscanf(str,"%s%s%s%lf",record[n].name,record[n].syear,record[n].stime,&record[n].time);  //注意double要加&

字符串的比较(string和char[] )

传统的c字符串比较必须用strcmp函数:(不能用==,否则比较的只是两个地址)

函数名: strcmp
功  能: 串比较
用  法: int strcmp(char *str1, char *str2);
看Asic码,str1>str2,返回值 > 0;两串相等,返回0

上面的头文件为<string.h> strncasecmp()是忽略大小写的。


c++ string 类型的比较可以用string的函数compare()
int compare ( const string& str ) const;
int compare ( const char* s ) const;
或直接用==比较

参考链接:https://www.cnblogs.com/youxin/archive/2012/06/21/2558279.html


STL注意和常用函数

map find

map<int,int>::iterator its=mp.find(it->first+k);
                if(its!=mp.end()){
                    count++;
                }


数学相关公式和模板

组合数学

利用的就是 组合数 与 杨辉三角 的关系 建立一个二维数组C[n][m] 打表

就能看到他们之间关系密切啊!区别就是顶点的值,杨辉三角为1,组合数为0)

其实这个“关系”是有数学公式的

写成递推关系就是 

组合数打表如下:

c[n][m]=c[n-1][m-1]+c[n-1][m]

int C[50][50];   //组合数
void  initTable(){
    for(int i=0;i<=26;i++){
        for(int j=0;j<=i;j++){
            if(i==j || j==0)
                C[i][j]=1;
            else
                C[i][j]=C[i-1][j-1]+C[i-1][j];
        }
    }
    C[0][0]=0;
}

参考链接:https://blog.csdn.net/lyy289065406/article/details/6648492

猜你喜欢

转载自blog.csdn.net/weixin_40760678/article/details/99068804