#include
#include
using namespace std;
int main()
{
string str;
while(cin>>str)
{
int size=str.length();
str[0]=str[0]-32;
//查看size数据
cout << "size = " << size << endl;
for(int i=0;i { if(str[i]=='\t'){ str[i+1]=str[i+1]-32; } //查看每一个字符的输出结果 cout << i << ":"<< str[i] << endl; } cout<< str << endl; } } 结果是: 问题出在:遇到空格时i就会重新计算。你是必须用while()吗,如果不是的话再试试。或者尝试使用getline()。
恕我愚昧,不知道'\t'是啥,重写了一个,环境:win7 64位旗舰版+VS2013旗舰版
/////////////////////////////////////////////////////////////////////////////
#include
#include
const int g_ascci_d_value = 32;//同一字母大小写的ascci差值
int main()
{
//定义缓冲区
std::string strInputBuff;
//循环接收输入,输入单个字母q退出程序
while (getline(std::cin, strInputBuff))
{
int iSize = strInputBuff.length();
if (iSize == 1 && strInputBuff[0] == 'q')
{
std::cout << "exit";
break;
}
//转换首字母(以空格区分单词)
for (int i = 0; i { //首字母默认大写 if (i == 0) { strInputBuff[i] = strInputBuff[i] - g_ascci_d_value; continue; } //空格自后的字母大写 if (strInputBuff[i] == ' ') { //是小写字母才进行转换,否则忽略 if (strInputBuff[i + 1] >= 97 && strInputBuff[i + 1] <= 122) { strInputBuff[i + 1] = strInputBuff[i + 1] - g_ascci_d_value; } ++i; } } //输出转换结果 std::cout << strInputBuff; //清空缓冲区 strInputBuff.clear(); } }