一、字符串最后一个单词长度
1、
# -*- coding:utf-8 -*-
while True:
try:
print u'请输入一串字符串'
line=raw_input()
if len(line)==0:
break
if len(line)>5000:
line=line[:5000]
wordlist=line.split()
print len(wordlist[-1])
except:
break
注意 raw_input()和line.split()的应用
注意break 跳出循环,当不输入和输入错的时候就结束整段程序。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(getline(cin,s))
{
int n=0,flag=1;
for(int i=s.length()-1;i>=0;--i)
{
if (flag && s[i]==' ')//去除最后的空格,注意设置标记的作用
{
continue;
}
else if(s[i]!=' ')
{
flag=0;
++n;
}
else
{
break;
}
}
cout <<n<<endl;
}
return 0;
}
2、
cin:
用法1:最基本,也是最常用的用法,输入一个数字:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}
用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cin>>a;
cout<<a<<endl;
}
3、cin.get()
cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a;
cin.get(a);
cout<<a<<endl;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a;
a=cin.get();
cout<<a<<endl;
}
两种方法都可以,但是都只接受第一个字符
3.2用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cin.get(a,8);
cout<<a<<endl;
}
类似于上面,接收了1个'\0'。
4、
4.1 cin.getline() // 接受一个字符串,可以接收空格并输出
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cin.getline(a,8);
cout<<a<<endl;
}
cin.getline()实际上有三个参数,cin.getline(接受字符串m,接受个数5,结束字符)
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cin.getline(a,8,'5');
cout<<a<<endl;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[20];
cin.getline(a,8,'9');
cout<<a<<endl;
}
选择最靠近的那个条件。cin.getline(a,b,c)其后必须要有参数输入,否则报错。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[3][20];
for(int i=0;i<3;i++)
{
cout<<"请输入第"<<i+1<<"个字符串:"<<endl;
cin.getline(a[i],20);
}
cout<<endl;
for(int j=0;j<3;j++)
{
cout<<"输出a["<<j+1<<"]的值:"<<a[j]<<endl;
}
}
数组类型的输入和输出
注意学会格式化的输入和输出。
5、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<str<<endl;
}
和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数,注意这个声明的是string ,而非char。
再有,这个将整个行都能输出,而没有‘\0’这种情况。
二、length
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int n;
getline(cin,a);
n=a.length();
cout<<n<<endl;
}
二、
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
输入描述:
输入一个有字母和数字以及空格组成的字符串,和一个字符。
输出描述:
输出输入字符串中含有该字符的个数。
1、将想要匹配的字符串分为大小写,按顺序与大写或者小写的匹配
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string str;
while (getline(cin, str))
{
char ch;
string str2;
getline(cin,str2);
ch=str2[0]; //匹配的值
char ch2 = 0; //定义0,是为了空格不输入的情况考虑
if (ch >= 'a'&&ch <= 'z')
{
ch2 = ch - 32; //如果大写,增加小写的值,如果小写增加大写的值
}
if (ch >= 'A'&&ch <= 'Z')
{
ch2 = ch + 32;
}
int count = 0;
for (int i = 0; i<str.size(); i++)
{
if (str[i] == ch || str[i] == ch2)
{
count++;
}
}
cout << count << endl;
}
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
char ch,ch2;
cin>>ch;
int n=0;
if(ch>='a'&&ch<='z')
{
ch2=ch-32;
}
else if(ch>='A' && ch<='Z')
{
ch2=ch+32;
}
else
{
ch2=ch;
}
for(int i=0;i<str.length();i++)
{
if (str[i]==ch || str[i]==ch2)
{
n++;
}
}
cout<<n<<endl;
}
return 0;
}
这段程序就实现不了空格字符的个数统计。
2、
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
char ch;
cin>>ch;
char ch2;
if(ch>='a'&&ch<='z')
{
ch2=ch-32;
}
else if(ch>='A' && ch<='Z')
{
ch2=ch+32;
}
else
{
ch2=ch;
}
int n=0;
for(int i=0;i<str.length();i++)
{
if (str[i]==ch || str[i]==ch2)
{
n++;
}
}
cout<<n<<endl;
}
return 0;
}
牛客网的测试不通过,所以以后最好用getline,而别用cin>>给变量赋值。
三、
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
1、
//构建1000个数组,输入选出的数的时候就已经在处理数据
#include <iostream>
using namespace std;
int main()
{
int N, n;
while (cin >> N) //输入的个数
{
int a[1001] = { 0 };
while (N--)
{
cin >> n;//输入的数组
a[n] = 1;//该编号置1
}
for (int i = 0; i < 1001; i++)
{
if (a[i])
cout << i << endl;
}
}
return 0;
}//
2、set容器
#include<iostream>
#include<cstring>
#include<set>
#include<ctime>
#define N 999 //三位小数。
using namespace std;
int main()
{
set<int> s; //set容器,从小到大排序,不重复
int i,n,num;
while(cin>>n)
{
s.clear(); //容器清洗
for(i=0; i<n; i++)
{
cin>>num;
s.insert(num);//插入数据
}
set<int>::iterator p;
for(p=s.begin(); p!=s.end(); p++)
{
cout<<*p<<endl;
} //这样会多输出一个空格
}
return 0;
}
#include<iostream>
#include<set>
using namespace std;
int main()
{
int loop ;
while (cin >> loop) //看题目,set容器
{
int a[1000], tem, i = 0;
for (int i = 0; i < loop; i++)
{
cin >> a[i];
}
set<int> num(a, a + loop);//这个什么鬼?
for (set<int>::iterator it = num.begin(); it != num.end(); it++)
{
cout << *it << endl;
}
}
return 0;
}
3、插入法排序
#include<iostream>
using namespace std;
void insert_sort(int a[],int len) //选择法排序
{
int i=0,j=0,temp=0,n;
for(i=1;i<len;i++)
{
temp =a[i];
for(j=i-1;j>=0&&temp<a[j];j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
for(n=0;n<len;n++)
{
cout<<a[n]<<" ";
}
cout<<endl;
}
}
int main()
{
int a[]={9,8,7,6,5,4,3,2,1} ;
cout<<"初始排序:"<<endl;
for(int n=0;n<9;n++)
{
cout<<a[n]<<" ";
}
cout<<endl<<endl;
insert_sort(a,9);
return 0;
}
可以看到,就是从第二个数开始,前面的数先排序,然后,将第三个数插入,依次顺序排开。
4、选择排序
#include<iostream>
using namespace std;
void insert_sort(int a[],int len) //选择法排序
{
int i=0,j=0,temp=0,n,smal;
for(i=0;i<len-1;i++)
{
smal=i;//最小值的下标,最小值一直放在这个地方
for(j=i+1;(a[j]<a[smal]&&j<len);j++)
{
temp=a[smal];//中继容器
a[smal]=a[j];
a[j]=temp;
}
for(n=0;n<len;n++)
{
cout<<a[n]<<" ";
}
cout<<endl;
}
}
int main()
{
int a[]={9,8,7,6,5,4,3,2,1} ;
cout<<"初始排序:"<<endl;
for(int n=0;n<9;n++)
{
cout<<a[n]<<" ";
}
cout<<endl<<endl;
insert_sort(a,9);
return 0;
}
首先假设第一个是最小值,然后和后面的值一一比较,碰到更小的,交换位置,所以第一个始终都是最小的。继而第二,第三等排下去。
5、冒泡排序
#include<iostream>
using namespace std;
void insert_sort(int a[],int len) //冒泡排序
{
int i=0,j=0,temp=0,n,smal;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1;j++)
{
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(n=0;n<len;n++)
{
cout<<a[n]<<" ";
}
cout<<endl;
}
}
int main()
{
int a[]={9,8,7,6,5,4,3,2,1} ;
cout<<"初始排序:"<<endl;
for(int n=0;n<9;n++)
{
cout<<a[n]<<" ";
}
cout<<endl<<endl;
insert_sort(a,9);
return 0;
}
从左向右依次两两比较,比较n次后就排好了,但是有个缺点,增加了无效的排序。
6、去重
#include<iostream>
#include<string>
using namespace std;
int deletrepeat(int a[],int n)
{
cout<<a[0]<<" ";//输出第一个数
int flag=1;//设置标志
int b[n];
b[0]=a[0];//存储去重复后的数组
int index=1;//变化后的下标
for(int i=1;i<n;i++)//循环比较的次数
{
for(int j=0;j<index;j++)//j新的数组下标
{
if(a[i]==b[j])
{
flag=0;
}
}
if(flag==1)
{
b[index]=a[i];
cout<<b[index]<<" ";
index++;
}
flag=1;
}
return index;
}
int main()
{
int a[]={1,2,3,4,4,5,6,2};
int n=8;
deletrepeat(a,n);
}
重复的值,下标改变了,需要重新附一个值给下标。
再有,c++,求数组长度的函数没有,length()是求字符串的。
四、
连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
1、
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
void Add_eight(string a,int n)
{
int x,y;
x=(n/8);
y=((n/8)+1)*8;
for(int j=0;j<x;j++)
{
for(int k=j*8;k<(j*8+8);k++)
{
cout<<a[k];
}
cout<<endl;
}
if((n%8)!=0)
{
for(int m=8*x;m<n;m++)
{
cout<<a[m];
}
for(int q=n;q<8*x+8;q++)
{
cout<<0;
}
}
//cout<<endl;//用例之间的换行不要在函数中
}
int main()
{
string a,b;
getline(cin,a);//输入a,b
getline(cin,b);
int n1,n2;
n1=a.length();
Add_eight(a,n1);
cout<<endl;注意,用例输出在这
n2=b.length();
Add_eight(b,n2);
}
注意用例之间的换行位置。
2、
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b,c;
a="abcdefg";
b=a.substr(0,3);
c=a.substr(0);
cout<<b<<endl;
cout<<c<<endl;
}
3、c++ append用法
(1)向string的后面加C-string
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
const char *c="out here";
s.append(c);
cout<<s<<endl;
}
(2).向string的后面加C-string的一部分
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
const char *c="out here";
s.append(c,3);//将c的前三个字符连接到s中
cout<<s<<endl;
}
(3).向string的后面加string
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
string c="wide ";
string q="world";
s.append(c);
s=s+q;//字符串可以相加相连
cout<<s<<endl;
}
(4)向string的后面加string的一部分
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
string c="wide world";
s.append(c,5,5);//把字符串s2中从5开始的5个字符连接到当前字符串的结尾
cout<<s<<endl;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
string c="wide world";
s.append(c.begin()+5,c.end());//把c的迭代器begin()+5和end()之间的部分连接到当前字符串的结尾当前字符串的结尾
cout<<s<<endl;
}
(5).向string后面加多个字符
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s="hello ";
s.append(4,'6');
cout<<s<<endl;
}
4、
#include <iostream>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
while(str.size()>8)
{
cout << str.substr(0,8) <<endl;
str=str.substr(8);
}
cout << str.append(8-str.size(),'0') << endl; //不够8位的补0
}
}
五、
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
1、它由0-9,A-F组成,字母不区分大小写。
#include <iostream>
using namespace std;
int main()
{
int a;
while(cin>>hex>>a){
cout<<a<<endl;
}
}
2、
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
cout << "Enter a decimal number: ";
cin >> n;
cout << n << " in hexadecimal is: "
<< hex << n << endl //十六进制
<< dec << n << " in octal is: "
<< oct << n << endl //八进制
<< setbase( 10 ) << n << " in decimal is: "
<< n << endl; //十进制
return 0;
}
3、输入和输出同时存在的情况
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin>>hex>>n;
cout<<n<<"的十六进制:"<<hex<<n;
return 0;
}
输入的是个十六进制数,但是保存的n却是十进制,还需要hex才能输出十六进制。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
cin>>oct>>n;
cout<<n<<"的十六进制:"<<hex<<n;
return 0;
}
3、传统一个一个读取的方式
#include<iostream>
#include<string>
using namespace std;
int main()
{
char *sp=new char[10];
while(cin>>sp)
{
int n;
int num;
int result=0;
n=strlen(sp);
for(int i=2;i<n;i++)
{
switch(sp[i])
{
case 'A':
case 'a'://大于10的处理
num=10;break;
case 'B':
case 'b':
num=11;break;
case 'C':
case 'c':
num=12;break;
case 'D':
case 'd':
num=13;break;
case 'E':
case 'e':
num=14;break;
case 'F':
case 'f':
num=15;break;
default:
if(sp[i]>='0'&&sp[i]<='9')
{
num=sp[i]-'0';
}
}
result=result*16+num;
}
cout<<result<<endl;
result=0;
}
return 0;
}
注意case 的情况,只能分开来识别,不能出现case(a||b)这种情况。因为后面给的是逻辑值,只能0或者1。
4、字符串长度求法
C/C++ strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。
#include <string>
#include <iostream>
using namespace std;
int main()
{
string name="babababa";
cout<<name.length()<<endl;
cout<<name.size()<<endl;
char mail[100]="haha";
cout<<strlen(mail)<<endl;
char *psd;
psd="lalala";
cout<<strlen(psd)<<endl;
return 0;
}