从数据库中读取的时间,string类型,格式为2015/9/9 ,有的则为2014/10/5,想将所有的月份都格式化为201509这种格式,
想法是截取两个'/'之间的字符(即月份),判断字符长度,长度为1则在月份前面加‘0’。
如何遍历‘2015/9/9 ’?或者还有什么更好的方法?
1、常规方式(下标+operator[])。
3、新式for循环 (第三种字符串遍历方式源自于c++11)。
字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j"。
而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。
1、补充subStr:str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给str。
2、str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给str。
3、trim()是去掉字符序列左边和右边的空格,如字符串str = " ai lafu yo ";str = trim(str);输出的将是"ai lafu yo"。
4、用UTF-16编码char和String中的字符,一个字符对应的编码值被称为一个代码点。有的代码点用16位编码,被称为一个代码单元,像char表示的那些字符;有的代码点用32位编码,也就是用两个连续的代码单元编码,如上文中的\ud801\uDC00。
5、返回的是字符串s中代码单元的个数。
本回答被网友采纳#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "123,456,789,";
unsigned int iSize = s.size();
cout << iSize << endl; // 12
cout << s.length() << endl; // 12
unsigned int i = 0;
int iCount = 0;
for(i = 0; i < iSize; i++)
{
if(',' == s[i])
{
iCount++;
}
}
cout << iCount << endl; // 3
return 0;
}
本文很简单。
原文链接:
string s;
for(char *p = s; *p; p++){……}
或者简单的
for(int i=0;i<s.length;++i)
if(s[i]=='/'){……}
其他方法:
①(年份都是四位数的话):
if (s[6] == '/') {s.insert(5, 1, '0');}
②用sscanf和sprintf(c的方法所以不支持string)
char s[10],a[2];
scanf("%s", &s);
sscanf(s, "%*[^/]/%[^/]", a);
a就是两个'/'之间的字符串
③用find函数找到月份位置再截取月份,s.left(s.find('/'))……
④自己写个函数:百度知道1382004468829644860
另外你可以直接百度"scanf中的%[^]%*c格式",csdn上那篇文章,也是一种方法,但是我写不好……本回答被网友采纳
int l = str.length();
for(int i = 0 ;i < l ;i++)
cout << str[i];追问
不是输出字符串。。
追答你不是要遍历么……这不就是遍历么……你把输出那里改成你想要的不就是了
追问要遍历并输出两个特殊字符之间的字符串。。这个是关键。。
追答拿两个变量记下/的位置,第一个前面的,两个中间的,第二个后面的挨个输出不就行了。
最简单的方法就是你读入的时候就不要字符串读,读一个数,读一个字符,读一个数,读一个字符,再读一个数啥事都没了