本文共 1854 字,大约阅读时间需要 6 分钟。
某君新认识一网友。当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?首先,2位数:10~99
其次,比儿子大27岁:27~99(不知道小孩子存不存在0岁这一说法,所以把27岁也算上)emmmm这确实是一道送分题~
#includeusing namespace std; int main() { int count = 0; for (int i = 27; i < 100; ++i) { int m = i%10; int n = i/10; if (m*10+i == i-27) { count += 1; } } return 0; }
刚开始一下子把这道题搞麻烦了,还想什么字符串反转……不过捎带学习了下面的知识。
int转string:
利用stringstream(需包含头文件#include < sstrteam >) 如:#include#include using namespace std; int main() { int a = 23; /*将stringsstream作为中间桥梁*/ stringstream ss; ss << a; //将a输出到ss中 string s = ss.str(); //将ss转换为string形式存入s中 /*或者如下所示[其实原理都一样啦]*/ stringstream ss; string str; ss << a; ss >> str; }
string转int:
第一种方法,仍然使用stringstream对象;istringstream iss(str); int num; iss >> num;
第二种方法,利用已有的函数;
atoi(const char*) //将字符串转换为int类型 —— 如果 string s 为空,返回值为0。所以要判断s是0还是空!转换后缓冲区溢出,返回 INT_MAX orINT_MIN。 atil(const char*) //将字符串转换为long int类型 —— 同上 atof(const char*) //将字符串转换为double类型 —— 成功转换显示一个int类型的值;不可转换的字符串返回0;如果转换后缓冲区溢出,返回HUGE_VAL。
当然,这也可以看到,上述三个函数要求参数是char数组,所以引出下面的问题。
string类型转char*数组: 很简单,c_str()string s = "abc"; char ss[] = s.c_str();
char转string:
string s(char*); //初始化 string &assign(const char *s); //用c类型字符串s赋值 string &assign(const char *s,int n); //用c字符串s开始的n个字符赋值
因为CString在VC++中常用,这里不常用,因此不写啦,附一个较全的链接
利用已有函数:
#include#include #include using namespace std; int main() { string s = "hello"; reverse(s.begin(), s.end()); return 0; }
自己编写:
void Reverse(char* s, int n) { for (int i = 0, j = n-1; i < j; ++i, --j) { char temp = s[i]; s[i] = [j]; s[j] = temp; } }
仍是利用已有函数:
#includechar s[] = "hello"; strrev(s);
转载地址:http://dvtai.baihongyu.com/