c语言输出英文字母对应数字并相加

c语言输出英文字母对应数字并相加,第1张

//字典顺序是按ASCII码值排序的,若想把数字转换为ASCII码,只须+上'0'就可以了,你可以查一下ASCII码字符集(c++教程的附录通常都有这表),就可以很清楚地知道大写字母、小写字母、数字之间转换关系!#include <iostream>
#include <string>
using namespace std;int main()
{
char str[5]; //注:字典顺序是按ASCII码排序的,小写的ASCII码值大于所有大写的ASCII码!
cout<<"请输入五个国家名字(英文):"<<endl;
int i,j,t;
for(i=0;i<5;i++)
{
str[i]=new char[20];
cin>>str[i];
}
for(i=0;i<4;i++)
{
t=i;
for(j=i+1;j<5;j++)
{
if(strcmp(str[t],str[j])>0)
{
t=j;
}
}
if(t!=i)
{
char temp[20];
strcpy(temp,str[t]);
strcpy(str[t],str[i]);
strcpy(str[i],temp); //交换
}
} for(i=0;i<5;i++)
{
cout<<str[i]<<'\t';
}
cout<<endl;
return 0;
}输出结果如下:(1)首字母为大写,排序如下:(2)首字母为小写的,排序如下:(3)首字母不统一的情况,则排序情况有点不一样,不要光看表面的字母,c++的小写字母ASCII码比大写字母的大!,排序如下:

如果使用的是冒泡排序,那么和整数排序唯一的不同就是这个部分:

if(a[j]>a[j+1])
    swap(a[j],a[j+1]);

那么在字符串排序的时候,需要用到一个库函数叫strcmp(char a[],char b[]);

这个函数在<cstring>库中[或者c语言中在<stringh>库中]

这个函数的用法就是输入字符串a,b,判断a,b的字典序大小

若a的字典序小返回负值

若a的字典序和b相同返回0

若a的字典序大于b的字典序返回正数

然后你将上面冒泡的部分改一下的话就是:

if(strcmp(a[j],a[j+1])>0)
    swap(a[j],a[j+1]);

这样的话就可以实现冒泡排序了

如果你使用的是系统快排的话,你可以用string,也可以定义一个结构体

struct Node{
    char ch[1000];
}s[12];
bool cmp(const Node &A,const Node &B){
    return strcmp(Ach,Bch)<0;
}
int main(){

sort(s+1,s+10+1,cmp);

}

这样的话也是可以实现的

----- 最近更新2022-02-03-----

本文目录结构预览:

在 Unix 初期,每个人都使用 ASCII 码,因此也没有什么问题。但是,ASCII 码基于英语,而随着 Unix、Linux 以及 Internet 在世界范围的扩展,有必要设计一种新系统,从而能够处理许多语言以及大量不同的文化习俗。

多年后,开发人员开发出了一种新系统,该系统基于 “区域设置(locale)” 的思想,这属于 POSIX 10032 标准。

区域设置是特定于语言和地域的规则和数据的集合,也可以看成是一组环境变量。区域设置包括有关排序规则、日期和时间格式设置、数字和货币约定,以及字符分类的信息。例如,如果 Linux 用户选择了美国英语区域设置,那么在 Linux 中,日期消息将以格式“月-日-年”显示,而货币符号将会使用“$”表示,等。

locale 命令是 Linux 系统中多语言环境的设置接口,用来设置或查看程序运行的不同语言环境。
除 C 和 POSIX 这两个 locale 名称外,locale 的命名规则为: language[_territory[codeset]][@modifier] ,
即: 语言[_地区[字符集编码]][@修饰] 。如: en_USUTF-8

1、语法

locale - 查看区域设置信息。(get locale-specific information)

语法:

常用选项:

注: -c 与 -k 选项后面须带上某个环境变量参数或具体的键名才有意义。如, locale -k LC_CTYPE 。

2、常用案例

使用命令 locale 查看系统中所有区域设置的当前值。

使用命令 locale -a 查看系统支持哪些区域设置。

3、查看区域设置特定变量的值

1)如果 locale 命令后面加上 category 参数,将显示该 category 的所有值。如 locale LC_CTYPE
2)如果 locale 命令后面加上 keyword 参数,将显示该 keyword 对应的值。如 locale charmap

当查看某个具体参数的值时,为了让输出结果更有可读性,一般会加上 -kc 选项。

例:

例:查看有关存储时间和日期的格式。

1、update-locale

update-locale - 修改全局区域设置。(Modify global locale settings)

语法: update-locale [OPTIONS] [var=locale | var] []

例:将 LANG 设置为 CUTF-8

设置完需要重启 shell 才能生效。

2、修改初始化配置文件

也可以通过修改初始化文件来修改区域设置,如修改用户的 bashrc 文件或 profile 文件。

如,在初始化文件中添加如下一行:

只是临时修改的话只在命令行执行该命令就行。

3、全局区域设置文件

如果是 Debian 类系统,可以在 /etc/default 中找到全局区域设置文件: /etc/default/locale 。
update-locale 命令修改的就是这个文件的内容。

如果是 Red Hat 类系统,则该文件位于: /etc/localeconf 。

说明:

优先级: LANG < LC_ < LC_ALL ,优先级比 LANG 高,LC_ALL 优先级最高。

LC_ALL 优先级最高,若设置了此变量,所有 LC_ 和 LANG 都会强制跟随它的值,所以一般不用。 LC_ALL 实际相当于一次设置全部的 LC_ 。

一般我们使用 LANG 来设置全部的 LC_,而独立设置一个 LC_ 为想要的设置。比如,我设置 LANG=en_USUTF-8 ,设置 LC_TIME=zh_GNUTF-8 ,目的是为了输出中文形式的时间。如下:

区域设置可以分为很多个类别(category),也就是多个环境变量。下表将列出一些常用的类别:

使用命 locale 可心展开查看每个 category 的具体键值对:

或者查看某个具体的值:

C 区域设置使用 ASCII 排序序列,在这种排序序列中,大写字母位于小写字母之前:ABCXYZabcz。该模式称为 C 排序序列

en_US 区域设置使用一种不同的排序序列,在排序序列中,小写字母和大写字母成对分组:aAbBcCzZ。这种模式比较自然,因为它以字典顺序组织单词和字符。所以这一模式称为 字典排序序列

排列顺序比较:

例:C 排序序列

例:字典排序序列

汗~不是说C++程序吗?怎么除了输入输出以外全是C风格的?
先说你几句,你这程序写得还真是把看官折腾得够呛,我反正是费了些工夫才弄明白你在干什么。
而且你这并不是排序,只是按字典序输出而已,序其实没变,对吧。。
先是一个语法错误:
else if (replacement[m][n]=temp[n]) //“==”
count1++;
然后是逻辑问题:
for (int n=0;n<compare(ch[m],ch[J]);n++)
if (replacement[m][n]<temp[n])
{ for (int l=0;l<strlen(ch[m]);l++)
temp[l]=replacement[m][l];
J=m;
break;
}
else if (replacement[m][n]=temp[n])
count1++;
这段判断并没有实现字典序的比较,比如adjk,Bdkj作为输入时,判断并没有在a,B的差异上打住,而是继续判断到j,k。
只要再加一句
else
break;
就行了,至少你的这个反例是没什么问题的。
看得出你是初学者,至少是初学者等级,能写到这程度值得称道。
不过给你提几个小建议:
1
for (int k=0;k<count;k++)
if (exist[k]==true)
break;
int J=k;
不要这样使用k,现在的标准是for(int i;;)中的i是局部变量,出了循环就无效了。虽然vc6可以通过编译。
2
for (int n=0;n<compare(ch[m],ch[J]);n++)
这里的compare函数用的不好,它会随着每次循环都运行一遍,若是这个值一直不变还好,万一变了,这玩意就是无底洞,想陷多深就多深。。
3与其映射成双精度数字,全都转化为小写或者大写再比较不也挺好吗?省时省力省空间。
就这些吧,请好好加油~
最后推荐使用C++风格的程序,虽然我写得不一定好,但好歹是真的C++程序……
以下C++程序实现了你的需求:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cctype>
using namespace std;
bool comparator(string a, string b){
char c1,c2;
for(int i = 0 ; i < alength() ; ++i)
{
if((c1 = tolower(a[i])) != (c2 = tolower(b[i]))){
return c1 < c2;
}
}
return true;
}
int main() {

vector<string> vec;
string temp;

cin >> temp;
while(temp != "#") {
vecpush_back(temp);
cin >> temp;
}
sort(vecbegin(),vecend(),comparator);

for (vector<string>::const_iterator iter = vecbegin() ; iter < vecend() ; ++iter)
{
cout << iter << endl;
}

return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13343795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-18
下一篇 2023-07-18

发表评论

登录后才能评论

评论列表(0条)

保存