将某个输入字符串中的所有关键字全部变成大写

d57929977 2005-09-26 05:13:11
刚学编译,想了n久实在不知道怎么识别关键字只晓得把关键字存一个字符数组里面
要求:比如说:whilelse 这样的字符变成大写要是:WHILElse 如果是whileELSE就错了
高手帮帮忙吧~~谢谢 可以不用演示程序,给我个算法吧~~
...全文
291 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
whuwdj 2005-11-02
  • 打赏
  • 举报
回复
用CString 的MakeUpper方法
surstar 2005-09-27
  • 打赏
  • 举报
回复
我晕,不好意思,我粘贴了两次,回复怎么也弄成了两次,CSDN BUG吧
surstar 2005-09-27
  • 打赏
  • 举报
回复
#include <string>
#include <cstdio>
#include <locale>
#include <iostream>
using namespace std;

int main()
{
char src[]="testintxxwhile";
char key[][8]={"int","while"};
char *temp;
cout<<"转换前:"<<src<<endl;
for(int i=0;i<2;i++)
{
//开始新的一次扫描,针对的是第i关键字
temp=src;
while((temp=strstr(temp,key[i]))!=NULL) //大小写敏感匹配
{
for(int j=0;j<strlen(key[i]);j++)
temp[j]=toupper(temp[j]);
}
}
std::cout<<"转换后:"<<src<<endl;
return 0;
}#include <string>
#include <cstdio>
#include <locale>
#include <iostream>
using namespace std;

int main()
{
char src[]="testintxxwhile";
char key[][8]={"int","while"};
char *temp;
cout<<"转换前:"<<src<<endl;
for(int i=0;i<2;i++)
{
//开始新的一次扫描,针对的是第i关键字
temp=src;
while((temp=strstr(temp,key[i]))!=NULL) //大小写敏感匹配
{
for(int j=0;j<strlen(key[i]);j++)
temp[j]=toupper(temp[j]);
}
}
std::cout<<"转换后:"<<src<<endl;
return 0;
}
surstar 2005-09-27
  • 打赏
  • 举报
回复
#include <string>
#include <cstdio>
#include <locale>
#include <iostream>
using namespace std;

int main()
{
char src[]="testintxxwhile";
char key[][8]={"int","while"};
char *temp;
cout<<"转换前:"<<src<<endl;
for(int i=0;i<2;i++)
{
//开始新的一次扫描,针对的是第i关键字
temp=src;
while((temp=strstr(temp,key[i]))!=NULL) //大小写敏感匹配
{
for(int j=0;j<strlen(key[i]);j++)
temp[j]=toupper(temp[j]);
}
}
std::cout<<"转换后:"<<src<<endl;
return 0;
}#include <string>
#include <cstdio>
#include <locale>
#include <iostream>
using namespace std;

int main()
{
char src[]="testintxxwhile";
char key[][8]={"int","while"};
char *temp;
cout<<"转换前:"<<src<<endl;
for(int i=0;i<2;i++)
{
//开始新的一次扫描,针对的是第i关键字
temp=src;
while((temp=strstr(temp,key[i]))!=NULL) //大小写敏感匹配
{
for(int j=0;j<strlen(key[i]);j++)
temp[j]=toupper(temp[j]);
}
}
std::cout<<"转换后:"<<src<<endl;
return 0;
}
surstar 2005-09-27
  • 打赏
  • 举报
回复
用个两层循环

   char src="testintx";
char *key=src;
for(int i=0;i<关键字个数;i++)
while(key=strstsr(key,关键字数组[i])
{
for(int j=0;j<strlen(关键字数组[i]);j++
toupper(key[j]);
}


我这个是个我的思路,效率很低
d57929977 2005-09-26
  • 打赏
  • 举报
回复
回楼上的,写词法分析器的必经之路啊
ssbelle 2005-09-26
  • 打赏
  • 举报
回复
如果 int intTemp = 0;
变成 INT INTTemp = 0;
应该不大让人舒服吧
把字符串里符合关键字的都变大写应该不妥吧
d57929977 2005-09-26
  • 打赏
  • 举报
回复
估计你们没有明白我的意思啊
输入:sasint4535sdsa7878char0101klauto
输出:saaINT4535sdsa7878CHAR0101klAUTO
明白了吗?把关键字变为大写 ,其它的不变化


下面是C语言中的32个关键字 我是这样定义的:
char *keyword[]={"auto", "break", "case", "char", "const", "continue", "default",
"do", "double", "else", "enum", "extern", "float", "for", "goto",
"if", "int", "long", "register", "return", "short", "signed",
"sizeof", "static", "struct", "switch", "typedef", "union", "unsigned",
"void", "volatile", "while"};
yayaniuniu502 2005-09-26
  • 打赏
  • 举报
回复
cstring a = "fdsafas";
a.replace("f","F");
echoxue 2005-09-26
  • 打赏
  • 举报
回复
up
surstar 2005-09-26
  • 打赏
  • 举报
回复
stricmp()函数可以比较,不分大小写
int stricmp(char *str1, char *str2);  这个可以来做比较
 
你可以把关键字放到MAP中  用标准库里的东西吧
fujingn188 2005-09-26
  • 打赏
  • 举报
回复
你说的识辨规则不是很明确,把需求描叙清楚点!
thisisll 2005-09-26
  • 打赏
  • 举报
回复
如果在大写字的ASCII的范围
那么就是大写
如果在小写字的ASCII的范围
那就加个数变成大写
rolen 2005-09-26
  • 打赏
  • 举报
回复
汗,,,

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧