c++字符串的处理

来源:百度知道 编辑:UC知道 时间:2024/06/15 15:01:54
输入一串长度小于80的字符串,输出英文字符。
这是我写的代码有很大的问题希望达人帮帮改改。
#include<iostream.h>

int main()
{
int i=0;
char a[i];
while(i<80)
{cin>>a[i];
i++;
}
if((a[i]>="a"&&a[i]<="z")||(a[i]>="A"&&a[i]<="Z"))//这里有错误不理解
{
while(a[i]!="\0")
{
cout<<a[i];
i++;
}
}
return 0;
}
D:\e\新建文件夹\vc\MSDev98\MyProjects\123\123.cpp(7) : error C2057: expected constant expression
D:\e\新建文件夹\vc\MSDev98\MyProjects\123\123.cpp(7) : error C2466: cannot allocate an array of constant size 0
D:\e\新建文件夹\vc\MSDev98\MyProjects\123\123.cpp(7) : error C2133: 'a' : unknown size
D:\e\新建文件夹\vc\MSDev98\MyProjects\123\123.cpp(12) : error C2446: '>=' : no conversion from 'c

修改如下:
#include<iostream>
#include <string>
using namespace std;

int main()
{
char a[80];
cin>>a;//字符数组可以直接输入,回车为结束
int j=strlen(a);//j为输入该字符数组的长度
for(int k=0;k<j;k++) //这里用for循环,不要使用while
{
if((a[k]>='a'&&a[k]<='z')||(a[k]>='A'&&a[k]<='Z'))//这里有错误不理解,解答:字符是单引号,字符串才是双引号
cout<<a[k];

}

return 0;
}

改动的地方有点多,但个人认为是必要的

char a[i]; 首先这里定义数组就不行,数组的大小要是个常量。
剩下的就是把双引号改为单引号就可以了。
a[i]是表示一个字符,'a'是一个字符, "a"是一个字符串,字符和字符串是不能比较的。 比较两个字符可以用==、!=、>等等,在C里要比较两个字符串的话就要用函数了,#include <string.h> 的strcmp(s1, s2); 在C++里可以直接比较两个string对象,只要包含头文件<string>。

我补充一点:数组大小必须是常量,你的数组大小根本没有定义。

可用代码如下啦,原因楼上各位都说得很清楚了,不用我再说的
int main()
{
int i=0;
char a[80];
while(i<1)
{cin>>a;
i++;
}
i=0;
while(a[i]!='\0'