C++基础字符串——菜菜子的编程笔记

有关编程(HDU)练习时候遇到的基础字符串问题—菜菜子的卑微记录

一、字符串的输入以及遇见空格的反转问题
hdu1062
错误代码:

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
char a[1005];
int main() {
	int t;
	cin >> t;
	while (t--) {
		getchar();
		//以每一个空格为分界点进行倒着输出
		
		while (cin >> a) {
			if (a[0] == '\n')break;
			int i = strlen(a) - 1;
			for (; i >= 0; i--)cout << a[i];
			cout << " ";
		}
		
		cout << endl;
	}
	return 0;
}

因为好久不练啊哈哈(/(ㄒoㄒ)/~~),果然基本的输入输出要点都忘得差不多了——菜鸟本菜~

正确解法(遇到空格反转,记得保存之前的位置)

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
char a[1005];
int main() {
	int t;
	cin >> t;
	getchar();
	while (t--) {
		
		//以每一个空格为分界点进行倒着输出

		cin.getline(a, 1005);//首先我们得到了一串字符串

		int len = strlen(a);//然后我们需要根据空格进行单词的保存与逆序输出
		int pre=0, next;
		for (int i = 0; i <= len - 1; i++) {
			//测试
			//cout << "a[0]=" << a[0] << endl;
			if (a[i] == ' ') {
				next = i - 1;
				/*if (next== pre) {
					cout << a[pre] << " ";
					continue;
				}*/
				for (int j = next; j >= pre; j--)
					cout << a[j];
				cout << " ";
				pre = i + 1;
			}
			/*if (i == len - 1) {
				next = i;
				for (int j = next; j >= pre; j--)
					cout << a[j];
				cout << " ";
			}*/
		}
		for (int j = len - 1; j >= pre; j--) {
			cout << a[j];
		}
		
		cout << endl;
	}
	return 0;
}

就是昂不要抱着侥幸心理啦之前偷懒了一下结果一直是PE就很难顶~

hdu2027


#include<iostream>
#include<string.h>
#include<string>
using namespace std;

char a[105];
int sum[7];
int main() {
	int n;
	cin >> n;
	getchar();
	while (n--) {
		cin.getline(a, 105);//读取一行字符串
		memset(sum, 0, sizeof(sum));
		for (int i = 0; i < strlen(a); i++) {
			if (a[i] == 'a')sum[0]++;
			if (a[i] == 'e')sum[1]++;
			if (a[i] == 'i')sum[2]++;
			if (a[i] == 'o')sum[3]++;
			if (a[i] == 'u')sum[4]++;
		}
		cout << "a:" << sum[0] << "\n";
		cout << "e:" << sum[1] << "\n";
		cout << "i:" << sum[2] << "\n";
		cout << "o:" << sum[3] << "\n";
		cout << "u:" << sum[4]<<"\n";
		if (n)cout << endl;
	}
}

这题是真的基础,对比上面一题主要复习了getchar()吃换行符号的知识点以及巩固了cin.getline(,) 的使用格式问题,啊哈哈~

hdu2043
字符串的题目:一开始我还以为特殊字符是ASCII码表里全部特殊字符(大写的愚蠢机灵鬼儿 .jpg),然后……嗷嗷啊,读题很重要呀,这种机考送分题错了太可惜5555~

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
char sec[100];
bool is_safe(char a[]) {
	int n = strlen(a);
	if (n > 16 || n < 8)return false;
	bool isA = false, isa = false, isT = false,isnum=false;
	//~,!,@,#,$,%,^
	for (int i = 0; i < n; i++) {
		if (a[i] <= 'z' && a[i] >= 'a')isa = true;
		if (a[i] <= 'Z' && a[i] >= 'A')isA = true;
		if (a[i] <= '9' && a[i] >= '0')isnum = true;
		if (a[i]=='~'||a[i]=='!'||a[i]=='@'||a[i]=='#'||a[i]=='$'||a[i]=='%'||a[i]=='^')isT = true;
	}
	int nn = 0;
	if (isA)nn++;
	if (isa)nn++;
	if (isT)nn++;
	if (isnum)nn++;
	if (nn >= 3)return true;
	return false;
}
int main() {
	int n;
	cin >> n;
	getchar();
	while (n--) {
		cin.getline(sec, 100);
		if (is_safe(sec))cout << "YES\n";
		else cout << "NO\n";
	}
	return 0;
}

遇到空格自动保存数据
没有采用先进的语言或者头函数(毕竟一些语言我还不懂,尴尬~)
稍微复习了一下cin.getline(字符串名,长度<可以设置大一点防止不够用>)
wa的原因很无语,自己忘记删干净掉找bug用的语句了
下面是ac的代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std;
int num[100008];
char b[100000];
int main() {
	int n;
	while (cin >> n) {
		int total = 0;
		getchar();
		while (n--) {
			cin.getline(b, 10000);
			int flag = false;
			int anum=-1;
			for (int i = 0; i < strlen(b); i++) {
				if (b[i] <= '9' && b[i] >= '0') {
					if (flag == false) {
						flag = true;
						anum = b[i] - '0';
					}
					else if (flag == true) {
						anum *= 10;
						anum += (b[i] - '0');
					}
				}
				else if(flag){
					num[total] = anum;
					anum = -1;
					total++;
					flag = false;
				}
			}
			if (anum >= 0) {
				num[total] = anum;
				total++;
			}
		}
		sort(num, num + total);
		int duan=-1, chong=-1;
		/*for (int i = 0; i < total ; i++) {
			cout << "num[" << i << "]:" << num[i] << " ";
		}
		cout << endl;*/
		for (int i = 0; i < total-1; i++) {
			if (num[i + 1] - num[i] == 0)chong = num[i];
			if (num[i + 1] - num[i] == 2)duan = num[i]+1;
		}
		cout << duan << " " << chong << endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值