做项目遇到的问题(C/C++/Java/MFC)

综合

在利用面向过程思想写程序的时候,常常遇到如果把一个函数A定义在函数B之后,就无法在B中调用A,我们可以在代码的开头部分加上函数的定义,即 void average()这种,告诉编译器后面有一个叫average的函数,这个就叫函数原型定义

C++

车型检测与车牌识别

调用百度的sdk https://ai.baidu.com/ai-doc/VEHICLE/pk3hb3gww

如您以前是百度云的老用户,其中API_KEY对应百度云的“Access Key ID”,SECRET_KEY对应百度云的“Access Key Secret”。

对这句话的理解
先登录百度云
创建应用
在这里插入图片描述
错误
在这里插入图片描述
解决

https://blog.csdn.net/pony_maggie/article/details/8588888

在这里插入图片描述
token无效,兄弟们

在这里插入图片描述
解决‘error_code‘: 110, ‘error_msg‘: ‘Access token invalid or no longer valid(百度智能云使用方法)

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=UuCSoaD92MguDWDrep3rUwfP&client_secret=cbWvZCZO70nYobu8CWFZvVDa7jBPKozu

在这里插入图片描述
{“log_id”:1392381833479454720,“error_msg”:“image transcode error”,“error_code”:282100}

我们看官方提供的,这个base64是不是有点东西?
在这里插入图片描述

现在转Base64编码

C++实现图片的base64编码

在这里插入图片描述
在这里插入图片描述

音乐播放器项目

mciSendString 和 mciSendCommand 函数的简单使用

C++读取txt文件有些符号乱码

把txt改成ANSI格式

C++输出个别字符乱码
就是这个字符有问题你,一看,居然是个整型,强转成char也不行,直接弄成string
在这里插入图片描述

string s = "¥";
outFeedback +=s;//contain in guess but not in corect position

C++中string转double和int

https://blog.csdn.net/qq_32273417/article/details/88318161

    string s;
    cin >> s;
    double n = atof(s.c_str());
    string s;
    cin >> s;
    cout << atoi(s.c_str()) << endl;

遍历被const修饰的list

被const修饰了的list是无法使用popback()的,也没办法用普通的迭代器遍历,需要用到const_iterator

void Show(const std::list<Student> & li)
{
	typedef std::list< Student >list_t;
	//list_t::iterator iter;
	list_t::const_iterator iter;
	//const string *str=  &li.pop_front();
	/*auto it = li.begin();
	while (it != li.end()) {
		it = li.erase(it);
	}*/
	//li.pop_back();
	
	for ( iter = li.begin(); iter != li.end(); iter++)
	{
		std::cout << iter->no << ","<<iter->name << std::endl;
	}
	//for (list<Student>::iterator iter = li.begin(); iter != li.end(); ++iter)
	//	cout << *iter << endl;
}

map遍历,排序,根据key查找value

按照key排序
c++ map基础知识、按键排序、按值排序

int cmp(const pair<string, unsigned>& x, const pair<string, unsigned>& y)
{
	return x.first < y.first;
}
void sortMapByValue(map<string, unsigned>& tMap, vector<pair<string, unsigned> >& tVector)
{
	for (map<string, unsigned>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)
		tVector.push_back(make_pair(curr->first, curr->second));

	sort(tVector.begin(), tVector.end(), cmp);
}
void alphabetSortedFrequency(map<string, unsigned> &msu)
{
	vector<pair<string, unsigned>> tVector;
	sortMapByValue(msu, tVector);
	for (int i = 0; i < tVector.size(); i++)
		cout << tVector[i].first << ":" << tVector[i].second << endl;
	
	/*map< string, unsigned>::iterator iter;
	for (iter = msu.begin(); iter != msu.end(); iter++) {
		cout << iter->first << ":" << iter->second << endl;
	}*/
}

map根据key查找value

 map<string, unsigned> msu;
 map< string, unsigned>::iterator iter;
 iter = msu.find(arr[i]);
 msu.insert(make_pair(arr[i], iter->second+1));

map遍历

/*map< string, unsigned>::iterator iter;
	for (iter = msu.begin(); iter != msu.end(); iter++) {
		cout << iter->first << ":" << iter->second << endl;
	}*/

利用transform函数把单词的首字母如果是大写就变成小写

#include<algorithm>
transform(word.begin(), word.begin() + 1, word.begin(), ::tolower);//首字母大写的就变成小写

no matching function for call to 'transform(std::__cxx11::basic_string
https://blog.csdn.net/fadbgfnbxb/article/details/96769096
在这里插入图片描述

利用stringstream判断字符串是不是全是数字

#include <sstream>
string content="12 45 5 No matter no ";
istringstream ss(content);
	string word;
	while (ss >> word) {
		stringstream sin(word);
		double d;
		char c;
		if (!(sin >> d))
		{
			transform(word.begin(), word.begin() + 1, word.begin(), ::tolower);//首字母大写的就变成小写
			arr.push_back(word);
		}
		if (sin >> c)
		{
			transform(word.begin(), word.begin() + 1, word.begin(), ::tolower);//首字母大写的就变成小写

			arr.push_back(word);
		}

	}

C++读取CSV文件

double数据打印到控制台编程了整数,无法打印小数部分

我的double数据如下,
在这里插入图片描述

控制台显示是这样的
在这里插入图片描述

解决方法

#include <iomanip> 
cout  << fixed << setprecision(3) << point1.x << endl;

在这里插入图片描述

系统没给定有多少组输入的情况下,如何测试多组输入

这样就可以了

while (cin >> n)

控制台下输入字符串(含空格)

输入书名和作者时,因为会含有空格,请用cin.getline()函数,例如cin.getline(name,sizeof(name))
https://blog.csdn.net/Softwaregg/article/details/6927929

    char s1[100];
	cin.getline(s1, sizeof(s1));
	char *name = (char*)malloc(strlen(s1) + 1);
	strcpy(name, s1);

主函数中无法访问类的静态变量?

class Student
{
public:
    static int count; //静态成员,表示学生人数
}
int Student::count = 0;//加在main前面

在这里插入图片描述

JAVA

java List的add方法报空指针异常

在这里插入图片描述

java 输出控制台对齐的问题

System.out.printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n",
 locationList.get(i).iDNumber, locationList.get(i).type, locationList.get(i).location, 
 locationList.get(i).surfaceArea, String.valueOf( locationList.get(i).monthlyRent), 
 locationList.get(i).status, locationList.get(i).sellingPrice);

在这里插入图片描述

java 类实现Comparable接口进行比较

public class Film implements Comparable {
    public static final String[]Ratings={"U","PG","12U","15U","18U"};
    String title;
    int duration;
    String rating;
@Override
    public int compareTo(Object o) {
        Film obj1 = (Film)o;
        //  Film obj2 = (Film)o2;

        if (obj1.duration >= this.duration) {
            return -1;
        } else {
            return 1;
        }
    }

}

自定义异常类

class myException extends Exception {
    public myException(String msg)
    {
        super(msg);       
    }
}

if(ds<0||ds>100)
		{
			  throw new myException ("请输入[0,100]的数");
		}

画UML类图

可以用draw.io画,这样可以使用它的类模板
在这里插入图片描述注意规范
在这里插入图片描述

double保留6位小数

方法1:BigDecimal.ROUND_DOWN表示直接去掉尾数。

  BigDecimal b = new BigDecimal(area( x1,  y1, x2,  y2,  x3,  y3));
           double d = b.setScale(6, BigDecimal.ROUND_DOWN).doubleValue();
           System.out.println(d);

方法2

double d = 114.145;
DecimalFormat df = new DecimalFormat("#.000000");
String str = df.format(d);
System.out.println(str);

java如果没有txt就创建txt

FileOutputStream fos=new FileOutputStream("test.txt",true);//true表明会追加内容,且如果没有
//txt会自动创建

java判断字符串是否为空

 if(! (line==null))
 if(!line.isEmpty())

在控制台运行java程序

首先在你的java文件目录下运行cmd
在这里插入图片描述
在cmd输入下面的指令,这是把java文件转成字节码文件

javac Sample.java

我的报错了,这是因为编码格式的问题
在这里插入图片描述
重新输入指令

javac -encoding UTF-8 Sample.java

就会生成class文件
在这里插入图片描述

然后运行class文件

java Sample

注意不是下面的指令,不需要加后缀
在这里插入图片描述

Java 小数点分割字符串 split(".")无效 需使用split("\.")来分割

首先抛出来2个问题:
问题1: 小数点不是转义字符, 为什么不能直接用split(.)?
问题2: 为什么非要加2个反斜杠, 只加1个不行吗?
下面给出解释
解答问题1: split里面的参数是正则表达式, 在正则表达式中, 小数点表示可以匹配任意字符, 所以不能直接用小数点.
解答问题2: 由于问题1已经解决, 很自然的想法就是加上反斜杠来进行转义, 而且这个转义语法其实只有正则表达式能够识别, Java语言中并不支持这种转义, 所以只加一个反斜杠是不行的, 再通俗点说就是, 我要告诉正则表达式2个字符, 一个是反斜杠, 一个是小数点, 反斜杠由于是特殊字符, 所以我要通过转义了告诉正则表达式, 而小数点不是特殊字符, 所以我可以直接告诉正则表达式, 最后的结果就是两个反斜杠+小数点.
————————————————
版权声明:本文为CSDN博主「Glenn甘露」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/braveloser/article/details/82499129

Map的get方法爆出空指针异常

这是因为map里面没有这个key的话用get就会空指针异常,需要先用containsKey判断是否存在,存在再用get去取出value.

Map.get()方法要注意其返回值为null

Map.getOrDefault()方法

当Map集合中有这个key时,就使用这个key对应的value值,如果没有这个key就使用默认值defaultValue

下面的代码表示当map里面没有ch这个key的话就返回0(这个0就是我们自己设置的defaultValue),如果存在,就返回key对应的value,

map.put(ch, map.getOrDefault(ch, 0) + 1);

https://blog.csdn.net/lxj_1993/article/details/79798963

C语言

判断输入的数是不是整数

bool IsConvertableToInt(char a[100])
{
	bool flag = true;
	int count = 0;
	int length = strlen(a);
	if (length > 11)
	{
		flag = false;
	}
	else if (length == 0)
	{
		flag = false;
	}

	else
	{
		for (int j = 0; j < length; j++)
		{
			if (a[j] > 57 || a[j] < 48)
			{
				count++;
				if (count > 0)
				{
					flag = false;
					break;
				}
			}
		}
	}
	return flag;
}

double转char[]

C double转char字符串

double d = 123456.1234567899;
char s[50];
 
sprintf(s,"%f", d);
printf("%s\n", s);
 
sprintf(s,"%.10f", d);
printf("%s\n", s);
 
sprintf(s,"%.2f", d);
printf("%s\n", s);

int 转char[]

char f[100];
snprintf(f, sizeof(f), "%d", i+1);

新建结构体变量提示未初始化

结构体变量声明及初始化的的那些坑

typedef struct teacher {
	int id;//教师号
	char name[20];//姓名
	char sex[20];//性别
	char companyName[100];//单位名称
	char address[100];//家庭住址
	char phone[20];//联系电话
	struct data *teacherData;
	//struct spend *teacherSpend;
	double payable;//应发工资
	double spen;//合计扣款
	double paidWages;//实发工资
}T;

T *teacher1;
	teacher1=(T *)malloc(100 * sizeof(T *));

结构体的int或者double在接受控制台输入的时候报错

出错前我是这样写的

scanf("%d", teacher1->id);

修改之后不报错(就是直接取地址)

scanf("%d", &teacher1->id);

C把double保留2位写入txt

fprintf(fp, "%d\t%0.2lf\n", data[i].id, data[i].basicWage);

在这里插入图片描述

注意,默认的%lf是保留6位小数

C语言中数组就算是值传递,对数组元素的操作也会改变原数组

C语言实现分屏显示

https://zhidao.baidu.com/question/23896299.html

可以在输出达到一定数量时,加入一个getch();或是system(“pause”);以实现暂停输出,按任一键后继续



#include<stdio.h>

void  main()

 {

  int  a,b,c;

  for(a=1 ;a<300;a++)

  {

 printf("A=%d\n",a);

      if(a%20==0)system("pause");

  } 

  system("pause");

}

MFC

MFC项目遇到的一些问题

MFC项目遇到的问题(二)

获取编辑框的值

GetDlgItem(IDC_EDIT2)->GetWindowText(structname);

字符串写入txt当有中文的时候换行不成功

如下图,改成多字节字符集
在这里插入图片描述

MFC:ListCtrl不显示内容?

需要先insertItem

MFC设置按钮或者编辑框可按可编辑、不可按不可编辑

GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT3)->EnableWindow(TRUE);

MFC 退出程序方法

exit(0)当前进程就再见了

给对话框添加菜单栏

在这里插入图片描述

然后在OnInitDialog()函数中添加以下代码

    CMenu m_Menu;
	m_Menu.LoadMenu(IDR_MENU1);
	SetMenu(&m_Menu);

【MFC】编辑框 CEdit Ctrl控件自动换行设置

MFC中Edit Control自动换行,即文字超出控件宽度自动换行。
属性设置:
Auto HScroll : False
Auto VScroll : True
Multiline : True
Want Return : True

IDEA

错误: 编码GBK的不可映射字符

我是在控制台使用命令

javadoc annoDemo.java

出的错误如下
在这里插入图片描述
解决方法是

javadoc -encoding UTF-8 annoDemo.java

在这里插入图片描述

Android

1:给界面添加一个按钮

直接拖动就好了
在这里插入图片描述
不知道怎么进去xml,可以参考下面的
在这里插入图片描述

2:给按钮绑定响应事件

在xml文件里面绑定一下函数名字
在这里插入图片描述

 public void onclick1(View view) //这个方法是弹出一个对话框
    {
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
       // builder.setIcon(R.drawable.ic_launcher);//设置图标
        builder.setTitle("若想成功必先自宫");//设置对话框的标题
        builder.setMessage("你确定要自宫吗?");//设置对话框的内容
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  //这个是设置确定按钮

            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(MainActivity.this, "自宫成功", Toast.LENGTH_SHORT).show();

            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {  //取消按钮

            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(MainActivity.this, "取消自宫",Toast.LENGTH_SHORT).show();

            }
        });
        AlertDialog b=builder.create();
        b.show();  //必须show一下才能看到对话框,跟Toast一样的道理
    }


    private void initEvent() {
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog();
            }
        });
    }

3:Android语音播报

https://blog.csdn.net/qq_33330887/article/details/89846459

eclipse

生成构造函数 getter setter 快捷键

alt+shift+s

run as java Application报错

在这里插入图片描述

因为是applet程序,所以直接run as java Applet就可以了

eclipse设置控制台字体大小

如何使用Eclipse打开已有工程

Swing

点击按钮弹出新的窗口

class subWindow extends JFrame {
	JTextArea text1 = new JTextArea();

	public subWindow() {
	}
}



btn[0].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				subWindow testinterfrm = new subWindow();// 新建子窗口对象
				testinterfrm.setVisible(true);// 子窗口可见				
				for (int i = 0; i < result.size(); i++) {
					testinterfrm.add(result.get(i));
				}
			}

		});

给textArea添加滚动条


class subWindow extends JFrame {
	JTextArea text1 = new JTextArea();

	public subWindow() {
//		setTitle("计算结果");//标题
//		setBounds(400, 300, 241, 394);//父窗口的坐标和大小
//		getContentPane().setLayout(null);//自由布局			
//		
//		//text1.setBounds(0, 0, 241, 394);
//		text1.setBounds(0, 0, 241,394);
//		// 设置字体
//				text1.setFont(new Font(null, Font.PLAIN, 20));
//				// 设置大小
//				//text.setPreferredSize(new Dimension(280,28));
//				// 不可编辑
//				text1.setEditable(false);		
//		getContentPane().add(text1);//按钮添加到窗口中
//		setLocationRelativeTo(null);//显示在屏幕中央
		setTitle("计算结果");// 标题
		this.setLayout(null);
		// 实例化文本框
		// JTextArea text1= new JTextArea();
		// 在文本框上添加滚动条
		JScrollPane jsp = new JScrollPane(text1);
		// 设置矩形大小.参数依次为(矩形左上角横坐标x,矩形左上角纵坐标y,矩形长度,矩形宽度)
		// jsp.setBounds(13, 10, 350, 340);
		jsp.setBounds(13, 10, 200, 340);
		// 默认的设置是超过文本框才会显示滚动条,以下设置让滚动条一直显示
		jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		// 把滚动条添加到容器里面
		this.add(jsp);
		this.setSize(240, 400);
		this.setVisible(true);
		// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		text1.setEditable(false);
		text1.setFont(new Font(null, Font.PLAIN, 20));
		setLocationRelativeTo(null);// 显示在屏幕中央
	}
}

一些小技巧

qq的截图快捷键按下,某些软件本来的宽口就不见了

据我观察,大都是因为按下了Alt键,会出现这种情况,解决方法是修改qq的截图快捷键,去掉alt键,或者换一种截图工具

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值