问题一
题目内容:
从键盘输入一个字符串,并在串中的第一次出现的最大元素后边插入字符串”ab”。
输入格式:
任意输入一个字符串
输出格式:
在串中的最大元素后边插入字符串”ab”
输入样例:
123csCUMT
输出样例:
123csabCUMT
#include<iostream> #include<string> using namespace std; int main() { string s; int max = 0, i, maxplace=0; cin >> s; for (i = 0; i < s.size(); i++) { if ((int)s[i] > max) { max = (int)s[i]; maxplace = i; } } for (i = 0; i <=maxplace; i++) cout << s[i]; cout << "ab"; for (i = maxplace + 1; i < s.size(); i++) cout << s[i]; return 0; }
记得初始化数据
问题2
题目内容:
输入一个字符串,其包括数字和非数字字符,如:a123x456 17935? 098tab,将其中连续的数字作为一个整数,依次存放到数组a中,统计共有多少个整数,并输出这些数。
输入格式:
数字和非数字字符的字符串
输出格式:
1)整数个数2)分别输出整数
输入样例:
a123x456 17935? 098tab583【注意需要保留带有空格的字符串,请不要使用gets,cin,练习使用cin.getline(char *str, int maxnum)】
输出样例:
5
123
456
17935
98
583
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int num = 0, i;
getline(cin, s);
if (s[0] <= '9' && s[0] >= '0')
num++;
for (i = 1; i < s.size(); i++)
{
if ((s[i] >= '0' && s[i] <= '9') && (s[i - 1] < '0' || s[i - 1]>'9'))
num++;
}
cout << num<<endl;
for (i = 0; i < s.size(); i++)
{
if((s[i]<'0'||s[i]>'9')||(s[i]=='0'&&(s[i-1]<'0'||s[i-1]>'9')&&(s[i+1]<='9'&&s[i+1]>='0')))
continue;
while (s[i] <= '9' && s[i] >= '0')
{
cout << s[i];
i++;
}
cout << endl;
}
return 0;
}
需要判断几个条件
1.开头是0,num++
2.开头非零,s[i]为数字,s[i-1]不是数字,num++
3.如果不是数字或者(这个数为0,前一个不是数字,后一个是数字),溜溜球
不然的话就输出它,然后移到下一位,判断是否是数字,是就输出,不是就跑路
对于 for 循环,continue 语句会导致执行条件测试和循环增量部分
问题三
题目内容:
有5个字符串,首先将它们按照字符串中字符个数由小到大排序,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。
输入格式:
5个字符串,用回车分隔
输出格式:
输出一个字符串:按5个字符串中字符个数由小到大排序,每个字符串后面有一个空格;再分别取出每个字符串的第三个字母合并成一个新的字符串输出,若少于三个字符的输出空格
输入样例:
test1234
123test
cumt
think
apples
输出样例:
cumt think apples 123test test1234
concatenate string:mip3s
#include<iostream> #include<cstring> using namespace std; int main() { char* s[5] = {}; char* temp = {}; int i, j; for (i = 0; i < 5; i++) { s[i] = new char[50]; cin >> s[i]; } for (i = 0; i < 4; i++) { for (j = 0; j < 4 - i; j++) { if (strlen(s[j]) > strlen(s[j + 1])) { temp = s[j]; s[j] = s[j + 1]; s[j + 1] = temp; } } } for (i = 0; i < 5; i++) cout << s[i] << ' '; cout << endl; cout << "concatenate string:"; for (i = 0; i < 5; i++) { if (strlen(s[i]) < 3) cout << ' '; else cout << s[i][2]; } return 0; }
strlen()函数在头文件<cstring>下面而不是<string>
用new的方式开辟二维数组,行用来存放输入的字符串,列用来提取字符。
选择排序法要排(n-1)次
#include<iostream> #include<cstring> using namespace std; int main() { char s[5][20]; char* p[5], * temp; int len[5], ltemp; for (int i = 0; i < 5; i++) p[i] = s[i]; for (int i = 0; i < 5; i++) cin >> p[i]; for (int i = 0; i < 5; i++) len[i] = strlen(p[i]); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4 - i; j++) { if (len[j] > len[j + 1]) { ltemp = len[j]; len[j] = len[j + 1]; len[j + 1] = ltemp; temp = p[j]; p[j] = p[j + 1]; p[j+ 1] = temp; } } } for (int i = 0; i < 5; i++) cout << p[i] << ' '; cout <<endl<< "concatenate string:"; for (int i = 0; i < 5; i++) { if (len[i] < 3) cout << ' '; else cout << *(p[i]+2); } return 0; }
定义了一个指针数组,里面的元素都是指针,指向一个一维数组,上面的方法是用new的方式开辟一个新数组。
*(p[i]+2):指针法访问二维数组