CString类型如何去掉以上Cstring字符串的空格

CString strRec ="abc d10 efg"
求strRec ="abcd10efg"
1. CString类型如何去掉以上Cstring字符串的空格,求解答,大神

4个回答

str.Replace(_T(" "), _T(""));

strRec = strRec.Replace(" ", "");

JAVA中去掉空格
1. String.trim()
trim()是去掉首尾空格
2.str.replace(" ", ""); 去掉所有空格,包括首尾、中间
复制代码 代码如下:String str = " hell o ";
String str2 = str.replaceAll(" ", "");
System.out.println(str2);
3.或者replaceAll(" +",""); 去掉所有空格
4.str = .replaceAll("\s*", "");
可以替换大部分空白字符, 不限于空格
\s 可以匹配空格、制表符、换页符等空白字符的其中任意一个 您可能感兴趣的文章:java去除字符串中的空格、回车、换行符、制表符的小例子

 CAtlString str(_T("This is a test."));
int n = str.Remove(_T('t'));

 CAtlString strBang(_T("Everybody likes epee fencing"));
int n = strBang.Replace(_T("epee"), _T("foil"));

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
CString分割问题,将一串字符串分成几个字符串
CString str=2016/05/30 11:29:05.744 9252 TRACE Test3 拆成 a=2016/05/30 b=11:29:05.744 c=9252 d=TRACE e=Test3 2016/05/30空格11:29:05.744空格空格空格9252空格空格TRACE空格空格Test3
vs2010关于win7/10下wchar_t*字符串的传值问题。
假设当前有一个函数FunA(const wchar_t *ip,const wchar_t *strpath); 是一个DLL里的函数。 我在MFC程序里设置了两个CString的变量, strIp,strPath 然后这两个变量都从各自的editText里使用GetDlgItemText()函数取得字符串。 取值是没问题的。都用MessageBox()打印查看过了。 我从MFC程序里传递这两个CString变量到FunA()函数里。 在win7下运行时,两个变量均可以读取到。 但到了win10下,前面的ip可以读取到,后面的strPath就变成了两个空格。 有大神知道是为什么吗? 这两个CString变量没有做任何处理。是直接作为参数传递的。 ip值为:192.168.1.1 strPath值为:C:\Users\h\Pictures\lovewallpaper\122865-106.jpg
c++中如何字符串中如何计算空格
#include <iostream> #include <cstring> using namespace std; int count(char str[]) { int len;int f=0; int a=0,b=0,c=0,d=0,e=0;//记得初始化 ,so important len=strlen(str); for(int i=0;i<len;i++) { if(str[i]>='a'&&str[i]<='z') { b++;//计算小写字母的个数 } else if(str[i]>='A'&&str[i]<='Z') { a++; } else if(str[i]>='0'&&str[i]<='9') { c++; } else //if(str[i]==' '||str[i]=='\0'||str[i]=='.') { d++; } } e=a+b+c+d+f;//计算总的字符个数是多少,计算总的字符个数, cout<<a<<endl; cout<<b<<endl; cout<<c<<endl; cout<<d<<endl; cout<<e<<endl; return 0; } int main() { int n=100; char*c=new char[n]; for(int i=0;i<n;i++) { cin>>c[i]; } count(c); delete []c; // return 0; }
poj2159求助 关于字符串的输入问题
题目链接:http://poj.org/problem?id=2159 我的代码 ``` #include <cstdio> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <string> using namespace std; int num1[27], num2[27]; char a[105], b[105]; int main() { int lena, lenb, j = 0, k = 0, dai = 0, count = 0; //fgets(a, 100, stdin); //fgets(b, 100, stdin); scanf("%s%s",a,b); if (lena != lenb) { cout << "NO" << endl; return 0; } for (int i = 0; i < strlen(a); i++) { num1[a[i] - 'A']++; num2[b[i] - 'A']++; } sort(num1, num1 + 26); sort(num2, num2 + 26); for (int i = 0; i < 26; i++) { if (num1[i] != num2[i]) { printf("NO\n"); return 0; } } printf("YES\n"); return 0; } ``` 这个是可以AC的!但是如果把字符串a,b的读取方式换成被注释掉的fgets那种,就会wrong answer 请教一下这是为什么,难道以后没有空格回车的输入都要尽量用scanf来弄吗,我以前都是fgets没有出过问题
MFC中for循环查找字符串并输出问题,
# h1.txt *#2% 9c28ef527888a8 2405F5f4da2aac @ # h2.txt E043DB (base 16) Shenzhen ViewAt Technology Co.,Ltd. 2405F5 (base 16) Integrated Device Technology (Malaysia) ## 要求查找h1.txt每行前6位是否存在于h2.txt, # 代码 CStdioFile file; int i; file.Open("F:\\h1.txt",CFile::modeRead);//h1.txt是串口接收到的MAC地址 CString str1,strd; for(i=0;file.ReadString(str1);i++) { if(str1.Find('*')>=0) { strd+="数据包开始,包含"+str1.Mid(2,str1.Find('%')-2)+"个MAC地址:"; strd+="\r\n"; } else if(str1.Find('@')>=0) { strd+="数据包结束!"; strd+="\r\n"; } else { CStdioFile read; int j; read.Open("F:\\h2.txt",CFile::modeRead);//h2.txt是MAC与厂商标准库 CString str11,strx; for(j=0;read.ReadString(str11);j++) { CString strTemp; CString buf1[2048],buf2[2048],buf3[2048]; buf1[i]=str1.Mid(0,6);//读取g2中每行0-6位之前的内容到buf1 buf2[j]=str11.Left(str11.Find(' '));//读取g1中每行空格符之前的内容到buf2 buf3[j]=str11.Mid(str11.Find('\t')+2).Trim(); if(buf2[j].Find(buf1[i])>=0) { strTemp+="MAC地址:"+str1.Mid(0,12)+"\t厂商:"+buf3[j]; strTemp+="\r\n"; } else //if(buf1[i].Find(buf2[j]==-1)) { strTemp+="MAC地址:"+str1.Mid(0,12)+"\t厂商:NULL"; strTemp+="\r\n"; } strx+=strTemp; } strd+=strx; } } SetDlgItemText(IDC_EDIT1,strd); # 查找结果如下 数据包开始,包含2个MAC地址: MAC地址:9c28ef527888 厂商:NULL MAC地址:9c28ef527888 厂商:NULL MAC地址:2405F5f4da2a 厂商:NULL MAC地址:2405F5f4da2a 厂商:Integrated Device Technology (Malaysia) 数据包结束! # 怎么能使输出为 数据包开始,包含2个MAC地址: MAC地址:9c28ef527888 厂商:NULL MAC地址:2405F5f4da2a 厂商:Integrated Device Technology (Malaysia) 数据包结束!
MFC一次性读取一个文件中所有字符
我想一次性读取文件中的字符串,但是我读取的时候有问题,我的代码如下 ``` file.Open(filePath,CFile::modeRead|CFile::typeBinery){ char * A = new char[file.GetLength()]; file.Read(A,file.GetLength()); CString strResult(A); delete A; return strResult.AllocSysString(); } ``` 比如我文件内容是123456789,但是实际他显示123456789 乱码,就是说实际字符后面多了好多乱码和空格,请问这个怎么解决啊,求助啊
PAT1009题:为什么不能用getline函数。。。
1009 说反话 (20 分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每个测试用例的输出占一行,输出倒序后的句子。 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello ``` #include <cstdio> #include <cstring> #include <iostream> const int MAXSIZE=90; int main(){ char ans[MAXSIZE][MAXSIZE]; char str[MAXSIZE]; int len; int row=0,col=0; // fgets(str,MAXSIZE,stdin); std::cin.getline(str,MAXSIZE); len=strlen(str); for(int i=0;i<len-1;++i){ if(str[i]!=' '){ ans[row][col++]=str[i]; }else{ row++; col=0; } } for(int i=row;i>=0;--i){ printf("%s",ans[i]); if(i>0) printf(" "); } return 0; } ```
新手,在做基于C++的串口接收数据导入SQL数据库的程序。有问题想请教大家。
这是我写的串口接受的程序,现在可以接收串口数据并成功存入数据库,但是无法将数据根据需要存入数据库表中的特定列。接收的数据应该是以空格来断开,从而存入不同的表中,现在只能讲接受的数据都存入一列当中,请大家帮我看看程序,怎么改写。先谢过大家 void CChuankouDlg::OnComm() { xinxi m_xinxi; // TODO: Add extra initialization here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; CString str; CString str1; CString str2; CString strtemp; if (m_ctrlComm.GetCommEvent() == 2)//事件值为2表示接收缓冲区内有字符 { variant_inp = m_ctrlComm.GetInput(); safearray_inp = variant_inp; len = safearray_inp.GetOneDimSize(); for (k = 0; k<len; k++) { safearray_inp.GetElement(&k, rxdata + k); } for (k = 0; k<len; k++) { BYTE bt = *(char*)(rxdata + k); strtemp.Format("%c", bt); m_strEditRXData += strtemp; str += strtemp; } //::MessageBox(NULL,time,"当前时间",MB_OK); COleDateTime time = COleDateTime::GetCurrentTime(); CString s1= time.Format("%y:%m:%d:%H:%M:%S"); m_xinxi.sql_insert(s1,str,str2); } UpdateData(FALSE);//更新编辑框内容 }
C++编程填空:很眼熟的模板题
描述 填写代码,按要求输出结果 ``` #include <cstdio> #include <iostream> #include <string> #include <cstring> using namespace std; // 在此处补充你的代码 string int2string(int x) { return to_string(x); } int int2squareint(int x) { return x * x; } int string2int(string str) { int res = 0; for (string::iterator iter = str.begin(); iter != str.end(); ++iter) res += *iter; return res; } string string2longerstring(string str) { return str + str; } int main() { int t; cin >> t; while (t--) { int b1[10]; for (int i = 0; i < 10; ++i) cin >> b1[i]; A<int, 10> a1 = b1; cout << a1.sum(2, 6, int2squareint) << endl; cout << a1.sum(2, 6, int2string) << endl; string b2[4]; for (int i = 0; i < 4; ++i) cin >> b2[i]; A<string, 4> a2 = b2; cout << a2.sum(0, 3, string2int) << endl; cout << a2.sum(0, 3, string2longerstring) << endl; } return 0; } ``` 输入 第一行是整数n,表示有n组数据 每组数据有2行 第一行是10个整数 第二行是4个不带空格的字符串,它们之间用空格分隔 输出 先输出10个整数里面的第3个到第7个的平方和 再输出10个整数里从第3个到第7个,按照字符串的方式,顺序连接的结果 再输出4个字符串里,第1个到第4个串中,所有字符的ASCII码加和得到的整数 再输出4个字符串里,第1个到第4个串,分别复制一遍后,按照字符串的方式,顺序连接的结果。 样例输入 ``` 1 1 2 3 4 5 6 7 8 9 10 Machine , Learning ! ``` 样例输出 ``` 135 34567 1586 MachineMachine,,LearningLearning!! ``` 提示 ``` 3^2 + 4^2 + 5^2 + 6^2 + 7^2 = 135 “Machine,Learning!”中所有字符的ASCII码相加为1586 ``` > http://cxsjsx.openjudge.cn/2018midexamcloze/7/
代码不知道错在哪里了,苦恼
题目是这样的 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ... 第n+1行:第n个学生的姓名 学号 成绩 其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。 输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。 输入样例: 3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95 输出样例: Mike CS991301 Joe Math990112 我的代码如下: ``` #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef struct student{ char name[10]; char ID[10]; int score; }stu; struct sturule { bool operator() (const student &a,const student &b) { return a.score < b.score; } }; int main(void) { int n; cin >> n; stu a[n]; for(int i=0;i<n;i++) cin >> a[i].name >> a[i].ID >> a[i].score; sort(a,a+n,sturule()); cout << a[n-1].name << " " << a[n-1].ID << endl; cout << a[0].name << " " << a[0].ID << endl; return 0; } ``` 做OJ题,几乎每次都不能一次性正确,错了有时候找不到问题,烦恼。
c++基础问题,求解答!
本来一个很简单的字符串拼接问题,因为题目要在2个字符串之间加逗号和空格,感觉很烦了, 我的方法代码看起来很丑,有没有更好方法,谢谢! ``` #include<iostream> #include<string> int main() { using namespace std; string s1,s2,s3; char t[3]={',','\0'}; cout << "Enter your first name: "; cin >> s1; cout << "Enter yor last name: "; cin >> s2; s3=s1+t; cout << "Here's the information in a single string: " << s3 << ' ' << s2 <<endl; return 0; } ``` ``` #include<iostream> #include<cstring> int main() { using namespace std; const int n=20; char first[n],last[n]; cout << "Enter your first name: "; cin.getline(first,n); cout << "Enter your last name: "; cin.getline(last,n); char t[2]={',','\0'}; cout << "Here's the information in a single string: " << strcat(first,t) << ' ' << last <<endl; return 0; } ```
请路过的大神有时间帮忙看看,搞不懂if语句运行后就无限循环
![图片说明](https://img-ask.csdn.net/upload/201812/06/1544088044_105006.png) if语句里面的内容运行后就无限循环,真想不通。。。。以下是整个程序的代码: ``` #include<iostream> #include<cstring> using namespace std; int fn1(char [],char []);//判断输入的有没有两个空格 int main()//让用户按要求输入正确的格式 { char blank[]=" "; cout<<"输入用两个空格分隔开的两个字符串\n"; for(int i=0;i<=0;i++) { char *input=new char[20]; cin.get(input,20); if(fn1(input,blank)) { i--; delete input; continue; } cout<<"输入正确"; delete input; } return 0; } int fn1(char judge_input[],char judge_blank[]) { for(int i=0;i<10;i++) { if((strstr(judge_input,judge_blank))==NULL) { cout<<"输入的格式错误,请重新输入\n"; return 1; } if((strstr(judge_input,judge_blank))[i]==' '&&i>=2) { cout<<"输入的格式错误,请重新输入\n"; return 1; } if(i==2) { return 0; } } } ```
MFC 错误 LNK2001 无法解析的外部符号
// SerialTest3Dlg.h : 头文件 // #pragma once #include "afxwin.h" #include "mscomm2.h" #include "stdint.h" #include "stdafx.h" // CSerialTest3Dlg 对话框 class CSerialTest3Dlg : public CDialogEx { // 构造 public: CSerialTest3Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SERIALTEST3_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: HICON m_hIcon; // 生成的消息映射函数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() private: CString m_EditReceive;//接收框 CString m_Editsend;//发送框 CComboBox m_comb1;//COM口下拉框 public: CComboBox m_comb2;//波特率下拉框 CMscomm2 m_mscom;//串口控件 afx_msg void OnBnClickedButtonOpen();//打开按钮 afx_msg void OnBnClickedButtonCleanup();//清楚按钮 afx_msg void OnBnClickedButtonClose();//关闭按钮 DECLARE_EVENTSINK_MAP() void OnCommMscomm1();//串口按钮(隐形) CEdit m_Edit; CString m_interpretingdata;//解析数据 afx_msg void OnBnClickedButton5();//发送按钮 }; typedef struct FPGA_INFO_REPORT { uint8_t bWorkMode; //当前工作模式0x00表示初始模式0x01表示扫频模式0x02表示闭环驱动和检测模式0x03表示开环驱动和检测模式0x04表示连续Q值计算模式 uint8_t bCheckMode; //当前检测类型0x01表示开环检测0x02表示闭环检测调试0x03表示闭环检测0x04表示正交校正模式 uint8_t bADMagTimes; //检测信号放大倍数 uint32_t dwSweepTime; //扫频完成时间,毫秒 float fSweepFreq; //扫频得到的谐振频率 float fSweepFreqAmpl; //扫频谐振频率对应的驱动反馈信号幅值 float fDriSignalFreq; //驱动信号频率 float fDriSignalAmpl; //驱动信号幅度 float fDriveFbAmpl; //驱动反馈信号幅度 float fDriveFbPhase; //驱动反馈信号相位 float fBalSignalAmpl; //力平衡信号幅度 float fBalSignalPhase; //力平衡信号相位 float fCheckSignalAmpl; //检测信号幅度 float fCheckSignalPhase; //检测信号相位 float fCheckSignalPalst; //角速度 }FPGA_INFO_REPORT1; // SerialTest3Dlg.cpp : 实现文件 // #include "stdafx.h" #include "SerialTest3.h" #include "SerialTest3Dlg.h" #include "afxdialogex.h" #include <stdlib.h> #include "parser.h" #include <string.h> #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CSerialTest3Dlg 对话框 CSerialTest3Dlg::CSerialTest3Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_SERIALTEST3_DIALOG, pParent) , m_EditReceive(_T("")) , m_Editsend(_T("")) , m_interpretingdata(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSerialTest3Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_Rev, m_EditReceive); DDX_Text(pDX, IDC_EDIT_Tev, m_Editsend); DDX_Control(pDX, IDC_COMBO2, m_comb1); DDX_Control(pDX, IDC_COMBO3, m_comb2); DDX_Control(pDX, IDC_MSCOMM2, m_mscom); DDX_Control(pDX, IDC_EDIT_Rev, m_Edit); DDX_Text(pDX, IDC_EDIT16, m_interpretingdata); } BEGIN_MESSAGE_MAP(CSerialTest3Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CSerialTest3Dlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_CLEANUP, &CSerialTest3Dlg::OnBnClickedButtonCleanup) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CSerialTest3Dlg::OnBnClickedButtonClose) //ON_BN_CLICKED(IDC_BUTTON1, &CSerialTest3Dlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON5, &CSerialTest3Dlg::OnBnClickedButton5) END_MESSAGE_MAP() // CSerialTest3Dlg 消息处理程序 BOOL CSerialTest3Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for (i = 0; i < 5; i++) { str.Format(_T("com %d"), i + 1); m_comb1.InsertString(i, str); } m_comb1.SetCurSel(0);//预置COM口 // 波特率选择组合框 CString str1[] = { _T("4800"),_T("9600"),_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200") }; for (int i = 0; i < 8; i++) { int judge_tf = m_comb2.AddString(str1[i]); if ((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("build baud error!")); } m_comb2.SetCurSel(7);//预置波特率为"115200" return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CSerialTest3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CSerialTest3Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CSerialTest3Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CSerialTest3Dlg::OnBnClickedButtonOpen()//打开串口 按钮程序 { // TODO: 在此添加控件通知处理程序代码 CString str, str1, n; //定义字符串 GetDlgItemText(IDC_BUTTON_OPEN, str); CWnd *h1; h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption if (!m_mscom.get_PortOpen()) { m_comb2.GetLBText(m_comb2.GetCurSel(), str1);//取得所选的字符串,并存放在str1里面 str1 = str1 + ',' + 'n' + ',' + '8' + ',' + '1'; //这句话很关键 m_mscom.put_CommPort((m_comb1.GetCurSel() + 1)); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //波特率为(波特率组合框)无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 if (m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为“关闭串口” } } else { m_mscom.put_PortOpen(false); if (str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //改变按钮名称为打开串口 } } } void CSerialTest3Dlg::OnBnClickedButtonCleanup()//清除数据按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } void CSerialTest3Dlg::OnBnClickedButtonClose()//退出按钮 { // TODO: 在此添加控件通知处理程序代码 m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //更新数据 } BEGIN_EVENTSINK_MAP(CSerialTest3Dlg, CDialogEx) ON_EVENT(CSerialTest3Dlg, IDC_MSCOMM2, 1, CSerialTest3Dlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() //CString temp; void CSerialTest3Dlg::OnCommMscomm1()//串口控件(按钮) { // TODO: 在此处添加消息处理程序代码 if (m_mscom.get_CommEvent() == 2) { char str[2048] = { 0 }; long k; CString temp; VARIANT InputData = m_mscom.get_Input(); //读缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变量转换为COleSafeArray型变量 for (k = 0; k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str + k); //转换为BYTE型数组 temp.Format(L"%02X",(char*)(str + k));//输出显示16进制 m_EditReceive += temp; // 接收到数据显示在编辑框里面 } SetTimer(1,10,NULL); //延时10ms UpdateData(false); m_Edit.SetSel(-1, 1); this->SetDlgItemTextW(IDC_EDIT_Rev, m_EditReceive);//将接收框内容显示到最后位置 m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一行 FPGA_INFO_REPORT1 info; memcpy(&info, str, sizeof(str)); CString str2; str2.Format(L"当前工作模式:%c\n", info.bWorkMode, "当前检测类型:%c\n", info.bCheckMode, "检测信号放大倍数:%c\n", info.bADMagTimes, "扫频完成时间:%c\n", info.dwSweepTime, "扫频得到的谐振频率:%f\n", info.fSweepFreq, "扫频谐振频率对应的驱动反馈信号幅值:%f\n", info.fSweepFreqAmpl, "驱动信号频率:%f\n", info.fDriSignalFreq, "驱动信号幅度:%f\n", info.fDriSignalAmpl, "驱动反馈信号幅度:%f\n", info.fDriveFbAmpl, "力平衡信号幅度:%f\n", info.fBalSignalAmpl, "力平衡信号相位:%f\n", info.fBalSignalPhase, "检测信号幅度:%f\n", info.fCheckSignalAmpl, "检测信号相位:%f\n", info.fCheckSignalPhase, "角速度:%f\n", info.fCheckSignalPalst); m_interpretingdata =str2; } } void CSerialTest3Dlg::OnBnClickedButton5() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去 } 以上代码报错 :错误 LNK2001 无法解析的外部符号 "public: virtual struct CRuntimeClass * __thiscall CMscomm2::GetRuntimeClass(void)const " (?GetRuntimeClass@CMscomm2@@UBEPAUCRuntimeClass@@XZ) SerialTest3 C:\Users\LFY\Desktop\SerialTest3\SerialTest3\SerialTest3Dlg.obj 1 是什么原因
MFC读取文件、处理数据优化问题,处理数据时速度太慢????????
# 怎么让这个程序处理数据快一点 //MAC地址处理代码 CStdioFile file; int i; CString str1,strd; file.Open("F:\\h1.txt",CFile::modeRead); //h1.txt是串口接收到的MAC地址数据包文件 for(i=0;file.ReadString(str1);i++) { str1.MakeUpper(); //h1.txt中字母大写 //开始标志 if(str1.Find('*')>=0) //该行str1中有字符“*”? { CTime ct=CTime::GetCurrentTime(); //获取系统当前时间 CString time=ct.Format("%Y.%m.%d.%H:%M:%S."); //CTime转换成CString strd += time + "\t数据包开始,包含" + str1.Mid(2,str1.Find('%')-2) + "个MAC地址:"; //EDIT显示 strd += "\r\n"; } //结束标志 else if(str1.Find('@')>=0) //该行str1中有字符‘@’? { strd += "数据包结束!!!"; strd += "\r\n"; } //处理MAC地址 else { CStdioFile read; CString str11; int j; BOOL bResult = FALSE; //BOOL用来结束循环 read.Open("F:\\z2.txt",CFile::modeRead); //z2.txt是标志MAC地址与厂商库文件 for(j=0;read.ReadString(str11);j++) { CString buf1[5000],buf2[5000],buf3[5000]; buf1[i]=str1.Mid(0,6); //读取str1中每行0-6位之前的内容到buf1, str1.Mid(0,str1.Find('\r')-3) buf2[j]=str11.Left(str11.Find(' ')); //读取str11中每行空格符之前的内容到buf2 buf3[j]=str11.Mid(str11.Find('\t')+2).Trim(); //读取str11中(‘\t’+2)之后部分到buf3 //判断 buf1 与 buf2 关系 if(buf2[j] == buf1[i]) { strd += "MAC地址:"+str1.Mid(0,12)+"\t厂商:"+buf3[j]; strd += "\r\n"; bResult = TRUE; //bResult置1 break; //结束, } }//该for循环结束,开始读取str1下一行 // if (!bResult) // { strd+="MAC地址:"+str1.Mid(0,12)+"\t厂商:NULL"; strd+="\r\n"; } } } SetDlgItemText(IDC_EDIT2,strd);
vs2010里,无法解析的外部符号 protected: void __thiscall
按论坛的教程编程串口,错误提示: yyyzzzDlg.obj : error LNK2001: 无法解析的外部符号 "protected: void __thiscall CyyyzzzDlg::OnStnClickedStatic4(void)" (?OnStnClickedStatic4@CyyyzzzDlg@@IAEXXZ) c:\users\yz980\documents\visual studio 2010\Projects\yyyzzz\Debug\yyyzzz.exe : fatal error LNK1120: 1 个无法解析的外部命令 程序: // yyyzzzDlg.cpp : 实现文件 // #include "stdafx.h" #include "yyyzzz.h" #include "yyyzzzDlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CyyyzzzDlg 对话框 CyyyzzzDlg::CyyyzzzDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CyyyzzzDlg::IDD, pParent) , m_EditReceive(_T("")) , m_EditSend(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CyyyzzzDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_EditReceive); DDX_Text(pDX, IDC_EDIT2, m_EditSend); DDX_Control(pDX, IDC_COMBO1, m_comb1); DDX_Control(pDX, IDC_COMBO2, m_cob2); DDX_Control(pDX, IDC_MSCOMM1, m_mscom); } BEGIN_MESSAGE_MAP(CyyyzzzDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON_OPEN, &CyyyzzzDlg::OnBnClickedButtonOpen) ON_BN_CLICKED(IDC_BUTTON_SEND, &CyyyzzzDlg::OnBnClickedButtonSend) ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CyyyzzzDlg::OnBnClickedButtonClear) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CyyyzzzDlg::OnBnClickedButtonClose) ON_STN_CLICKED(IDC_STATIC4, &CyyyzzzDlg::OnStnClickedStatic4) END_MESSAGE_MAP() // CyyyzzzDlg 消息处理程序 BOOL CyyyzzzDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 串口选择组合框 CString str; int i; for(i = 0; i < 15; i++) { str.Format(_T("COM %d"), i+1); m_comb1.InsertString(i, str); //将COM 1-15填入comb1 } m_comb1.SetCurSel(0); //预置为COM 1 //波特率选择组合框 CString str1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"), _T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")}; for(i = 0; i < 12; i++) { int judge_tf = m_cob2.AddString(str1[i]); if((judge_tf == CB_ERR) || (judge_tf == CB_ERRSPACE)) MessageBox(_T("Build baud error!")); } m_cob2.SetCurSel(5); //预置波特率为9600 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CyyyzzzDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CyyyzzzDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CyyyzzzDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CyyyzzzDlg::OnBnClickedButtonOpen() { CString str, str1, n; GetDlgItemText(IDC_BUTTON_OPEN, str); //str获得与对话框中的控件相关的标题或文本 CWnd *h1; //窗口类的基类 h1 = GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption //串口为关闭状态 if(!m_mscom.get_PortOpen()) { m_cob2.GetLBText(m_cob2.GetCurSel(), str1); //取得所选的字符串,并存放在str1里面 str1 = str1+','+'n'+','+'8'+','+'1'; m_mscom.put_CommPort(m_comb1.GetCurSel()+1); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //comb2选择的波特率,无校验,8数据位,1个停止位 m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许 m_mscom.put_PortOpen(true); //打开串口 //打开成功 if(m_mscom.get_PortOpen()) { str = _T("关闭串口"); UpdateData(true); //把控件中的值和变量进行交换 h1->SetWindowText(str); //改变按钮名称为‘’关闭串口”,提供关闭操作 } } //串口为打开状态 else { m_mscom.put_PortOpen(false); //关闭串口 //关闭成功 if(str != _T("打开串口")) { str = _T("打开串口"); UpdateData(true); h1->SetWindowText(str); //更新数据后,提供打开操作 } } } void CyyyzzzDlg::OnBnClickedButtonSend() { UpdateData(true); //更新控件数据 m_mscom.put_Output(COleVariant(m_EditSend));//把发送编辑框的数据发送出去 } void CyyyzzzDlg::OnBnClickedButtonClear() { m_EditReceive = _T(""); //给接收编辑框发送空格符 UpdateData(false); //根据数据状态反馈给控件 } void CyyyzzzDlg::OnBnClickedButtonClose() { //若当前串口为打开 if(m_mscom.get_PortOpen()) m_mscom.put_PortOpen(false); //置为关闭 CDialogEx::OnCancel(); } BEGIN_EVENTSINK_MAP(CyyyzzzDlg, CDialogEx) ON_EVENT(CyyyzzzDlg, IDC_MSCOMM1, 1, CyyyzzzDlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CyyyzzzDlg::OnCommMscomm1() { //接收缓冲区有数据 if(m_mscom.get_CommEvent() == 2) { char str[1024] = {0}; //缓冲区最大为1024 long k; VARIANT InputData = m_mscom.get_Input(); //读入缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变À量转换为COleSafeArray型变量 for(k = 0; (size_t)k < fs.GetOneDimSize(); k++) { fs.GetElement(&k, str+k); //转换为BYTE型数组 } m_EditReceive += str; //接收到编辑框里面 //SetTimer(1, 10, NULL); //延时10ms UpdateData(false); //将数据在屏幕中对应控件中显示出来。 } }
答案错误50%,输出正确,求助。
# 题目描述 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。 ## 输入 共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。 ## 输出 第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。 第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。 请注意行尾输出换行。 ## 样例输入 101 AAA 80 81 82 102 BBB 83 84 85 103 CCC 86 87 88 104 DDD 89 90 91 105 EEE 92 93 94 106 FFF 80 90 100 107 GGG 85 90 95 108 HHH 80 85 90 109 III 90 91 92 110 JJJ 91 88 87 ## 样例输出 85.60 87.90 90.40 105 EEE 92 93 94 写的很臃肿,如果有表达的不清楚的地方请直言,谢谢! ``` #include<cstdio> #include<cstring> #include<cmath> using namespace std; struct student{ int num; char name[20]; int grade[20]; }; void input(student* &p); //输入函数 void print(student* &p); //输出函数 void caculate(double ave_s[], double ave_p[], int top[], student* &p); //计算单科总平均成绩与个人总平均成绩最高 void input(student* &p){ int i, j, judge = 0; char a[20]; //用于复制name数组 int n = 10; for(i=0; i<n; i++){ scanf("%d%s%d%d%d", &(p->num), p->name, p->grade, &(p->grade[1]), &(p->grade[2])); int len = strlen(p->name); //名字(长度不超过19,无空格) strcpy(a, p->name); for(j=0; j<len; j++){ if(a[j] == 32){ judge = 1; //作为空格判断 break; } } if(judge || len > 19 ){ n++; continue; } if((*p).grade[0] > 100 || (*p).grade[1] > 100 || (*p).grade[2] > 100 //成绩(0至100) || (*p).grade[0] < 0 || (*p).grade[1] < 0 || (*p).grade[2] < 0){ n++; continue; } p = p + 1; } } void caculate(double ave_s[], double ave_p[], int top[], student* &p){ double sum_1, sum_2, sum_3; int i, j, k; int temp; double copy[20]; //用于复制平均分数组 for(i=0; i<10; i++){ sum_1 += p->grade[0]; sum_2 += p->grade[1]; sum_3 += p->grade[2]; p = p + 1; } ave_s[0] = sum_1 / 10; //单科总平均分 ave_s[1] = sum_2 / 10; ave_s[2] = sum_3 / 10; p = p - 10; for(j=0; j<10; j++){ double sum_p = (*p).grade[0] + (*p).grade[1] + (*p).grade[2]; ave_p[j] = sum_p / 3; p = p + 1; sum_p = 0; } for(k=0; k<10; k++){ copy[k] = ave_p[k]; } for(i=1; i<10; i++){ //将复制的数组冒泡排序 for(j=0; j<=10-i-1; j++){ if(copy[j] > copy[j + 1]){ temp = copy[j]; copy[j] = copy[j + 1]; copy[j + 1] = temp; } } } for(i=0, j=0; j<10; j++){ if(ave_p[j] == copy[9]){ top[i++] = j; //按顺序将最高分的同学加入数组 } } } void print(student* &p){ int top[5] = {0, 0, 0, 0, 0}; double ave_s[10], ave_p[10]; p = p - 10; //回到第一个student caculate(ave_s, ave_p, top, p); p = p - 10; printf("%.2f %.2f %.2f \n", ave_s[0], ave_s[1], ave_s[2]); p = p + top[0]; //如果有多位相同,则输出第一个最高分同学 printf("%d %s %d %d %d\n", (*p).num, (*p).name, (*p).grade[0], (*p).grade[1], (*p).grade[2]); } int main(){ student stu[10]; student* p = stu; input(p); print(p); return 0; } /*101 AAA 80 81 82 102 BBB 83 84 85 103 CCC 86 87 88 104 DDD 89 90 91 105 EEE 92 93 94 106 FFF 80 90 100 107 GGG 85 90 95 108 HHH 80 85 90 109 III 90 91 92 110 JJJ 91 88 87 */ ```
清华oj数据结构问题:祖玛
本地测试数据已经通过了,提交上去就是过不了,我已经尽量在每个可能空指针的地方判断过了,心累 描述 祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。 开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。 游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。 输入 第一行是一个由大写字母'A'~'Z'组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。 第二行是一个数字n,表示整个回放过程共有n次操作。 接下来的n行依次对应于各次操作。每次操作由一个数字k和一个大写字母Σ描述,以空格分隔。其中,Σ为新珠子的颜色。若插入前共有m颗珠子,则k ∈ [0, m]表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。 输出 输出共n行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上的珠子序列。 如果轨道上已没有珠子,则以“-”表示。 样例 Input ACCBA 5 1 B 0 A 2 B 4 C 0 A Output ABCCBA AABCCBA AABBCCBA - A 限制 0 ≤ n ≤ 10^4 0 ≤ 初始珠子数量 ≤ 10^4 时间:2 sec 内存:256 MB 提示 列表 ``` #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define pNode Node* #define pList List* const int SZ = 1<<20; struct fastio{ //fast io char inbuf[SZ]; char outbuf[SZ]; fastio(){ setvbuf(stdin,inbuf,_IOFBF,SZ); setvbuf(stdout,outbuf,_IOFBF,SZ); } }io; struct Node { char color; pNode pred; pNode succ; Node() { } Node(char c,pNode pred=NULL,pNode succ=NULL):color(c),pred(pred),succ(succ) { } void insertAsSucc(char c); void insertAsPred(char c); }; void Node::insertAsSucc(char c) { pNode x = new Node(c,this,this->succ); this->succ = x; } void Node::insertAsPred(char c) { pNode x = new Node(c,this->pred,this); this->pred = x; } class List { private: int size; pNode head; pNode trai; public: List() { head = new Node(); trai = new Node(); head->succ = trai; trai->pred = head; head->color = '-'; trai->color = '^'; size = 0; } pNode insert(int n,char c); void traverseShow(); void insertBfTrai(char c); void check(pNode start); pNode checkB(pNode p); pNode checkA(pNode p,bool &change); pNode remove(pNode p); }; pNode List::remove(pNode p) { //规定删除后返回前一节点 if(p == this->trai) return p->pred; if(p == this->head) return p; pNode q = p->pred; p->pred->succ = p->succ; p->succ->pred = p->pred; delete p; size--; return q; } void List::check(pNode start) { bool change = true; //以下循环的flag while(change) { start = checkB(start); start = checkA(start,change); } } pNode List::checkB(pNode p) { //从p开始往前(before) 检查 if(p==this->head) return p->succ; //每次有->pred,->succ前都要检查 pNode q = p->pred; int count = 1; while(q!=this->head && q->color==p->color) { q=q->pred; count ++; if(count == 3) { for(int i=0;i<3;i++) { p = this->remove(p); } count=1; if(p==this->head) return p->succ; q=p->pred; } } return q->succ; //q和p内容不同,q->succ和p内容相同 } pNode List::checkA(pNode p,bool &change) { //从p开始往后(After)检查 change = false; if(p==this->trai) return p->pred; pNode q = p->succ; int count = 1; while(q!=this->trai && q->color==p->color) { count++; q = q->succ; if(count == 3) { //可以消掉 change = true; //外层循环 可以继续 for(int i=0;i<3;i++) { p = this->remove(p); p = p->succ; } count = 1; if(p==this->trai) return p->pred; q = p->succ; } } return q->pred; } void List::insertBfTrai(char c) { //在尾节点前插入一个节点 pNode p = new Node(c,trai->pred,trai); trai->pred->succ = p; trai->pred = p; size++; } pNode List::insert(int n,char c) { //从第n个位置插入 if(n>this->size) n=this->size; pNode p = head; while(n-- > 0) { if(p != this->trai) p=p->succ; } p->insertAsSucc(c); size++; return p->succ; } void List::traverseShow() { //输出整个链表 内容 pNode p = head; if(this->size == 0) printf("-"); while((p=p->succ)!=trai) { printf("%c",p->color); } printf("\n"); } //相关全局量定义 char s[20000]; //<10^4即可 int posi[20000]; char colors[20000]; int main(){ #ifndef _OJ_ freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif //data input gets(s); int len=strlen(s); int n; //insert的操作次数 scanf("%d",&n); //printf("%d ",len); pList balls = new List(); for(int i=0;i<len;i++) { if('A'<=s[i] && s[i]<='Z') balls->insertBfTrai(s[i]); //初始状态构建 } for(int i=0;i<n;i++) { scanf("%d %c",posi+i,colors+i); //n行插入操作输入 } //执行n次操作 for(int i=0;i<n;i++) { if('A'<=colors[i] && colors[i]<='Z') { pNode p = balls->insert(posi[i],colors[i]); //取得新插入节点 balls->check(p); //每插入一个数据,就从插入点开始检查能否消掉 balls->traverseShow(); //输出 } } delete balls; return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201607/23/1469269301_619190.png)
PAT乙1028 求求各位大哥大嫂,萌新测试点2死活过不去
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数 N,取值在(0,10 ​5 ​​];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。 输出格式: 在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。 输入样例: 5 John 2001/05/12 Tom 1814/09/06 Ann 2121/01/30 James 1814/09/05 Steve 1967/11/20 输出样例: 3 Tom John #include<iostream> #include<algorithm> #include<cstring> #define _CRT_SECURE_NO_WARNINGS using namespace std; typedef struct List { char name[6]; char date[11]; int year, month, day; }; typedef struct seq{ List data[100000]; }; bool compare(List a, List b) { if (a.year != b.year) return a.year > b.year; else if (a.year == b.year) if (a.month != b.month) return a.month > b.month; else return a.day > b.day; } int main() { seq L; int count = 0; cin >> count; for (int i = 0; i < count; i++) { cin >> L.data[i].name >> L.data[i].date; L.data[i].year = (L.data[i].date[0] - '0') * 1000 + (L.data[i].date[1] - '0') * 100 + (L.data[i].date[2] - '0') * 10 + (L.data[i].date[3] - '0'); L.data[i].month = (L.data[i].date[5] - '0') * 10 + L.data[i].date[6] - '0'; L.data[i].day = (L.data[i].date[8] - '0') * 10 + L.data[i].date[9] - '0'; getchar(); }//将所有数据写到结构体数组中 sort(L.data,L.data+(count), compare);//不管有没有错误数据,先从年轻到年老排序 int count1 = count, count2 = 0; count = 0; char oldest[6], youngest[6]; for (int i = 0; i < count1; i++)//过滤错误数据 { if (count == 1 && count2 == 0) { strcpy(youngest, L.data[i - 1].name); count2++; } if (L.data[i].year > 1814 && L.data[i].year <2014) { count++; strcpy(oldest, L.data[i].name); } else if (L.data[i].year == 1814) { if (L.data[i].month > 9) { count++; strcpy(oldest, L.data[i].name); } else if (L.data[i].month == 9) if (L.data[i].day >= 6) { count++; strcpy(oldest, L.data[i].name); } } else if(L.data[i].year==2014) { if (L.data[i].month < 9) { count++; strcpy(oldest, L.data[i].name); } else if (L.data[i].month == 9) if (L.data[i].day <= 6) { count++; strcpy(oldest, L.data[i].name); } } } if (count == 0) { cout << count; return 0; } cout << count <<" "<< oldest <<" "<< youngest; system("pause"); }
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
应届生/社招面试最爱问的几道Java基础问题
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! 一 为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
立即提问