C语言求姓氏首字母之和,如何在C中大写名字和姓氏的首字母?
17 回复 | 直到 4 年前
1
255
4 年前
TextInfo.ToTitleCase()
将字符串的每个标记中的第一个字符大写。
如果不需要维护首字母缩略词大写,则应包括
ToLower()
.
string s = "JOHN DOE";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
// Produces "John Doe"
如果当前区域性不可用,请使用:
string s = "JOHN DOE";
s = new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(s.ToLower());
2
117
12 年前
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
3
30
9 年前
String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);
以上代码不起作用…..
因此,将下面的代码转换为lower,然后应用函数
String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());
4
12
7 年前
有些情况下
CultureInfo.CurrentCulture.TextInfo.ToTitleCase
无法处理,例如:撇号
'
.
string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo");
// input = O'reilly, M'grego, D'angelo
string input = "o'reilly, m'grego, d'angelo";
input = Regex.Replace(input.ToLower(), @"\b[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo
这个
正则表达式
例如,如果我们想处理
MacDonald
和
McFry
正则表达式变为:
(?<=\b(?:mc|mac)?)[a-zA-Z]
string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald'S, McFry
如果我们需要处理更多的前缀,我们只需要修改组
(?:mc|mac)
,例如添加法语前缀
du, de
:
(?:mc|mac|du|de)
.
最后,我们可以意识到
正则表达式
也会匹配这个案例
MacDonald'S
最后一次
's
所以我们需要在
正则表达式
带着消极的眼光
(?
. 最后我们有:
string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](? m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry
5
7
12 年前
mc和mac是美国常见的姓氏前缀,还有其他的。textinfo.toitlecase不处理这些情况,不应用于此目的。我是这样做的:
public static string ToTitleCase(string str)
{
string result = str;
if (!string.IsNullOrEmpty(str))
{
var words = str.Split(' ');
for (int index = 0; index < words.Length; index++)
{
var s = words[index];
if (s.Length > 0)
{
words[index] = s[0].ToString().ToUpper() + s.Substring(1);
}
}
result = string.Join(" ", words);
}
return result;
}
7
4
3 年前
最直接的选择是使用
ToTitleCase
在.NET中可用的函数,该函数大部分时间都应注意名称。AS
edg
指出有些名字是不适用的,但这些名字是相当罕见的,所以除非你的目标是一个文化,这样的名字很常见,没有必要担心太多的事情。
但是,如果您不使用.NET语言,那么它取决于输入的外观-如果您的名字和姓氏有两个单独的字段,那么您可以使用子字符串将第一个字母大写,然后将其余的字母降低。
firstName = firstName.Substring(0, 1).ToUpper() + firstName.Substring(1).ToLower();
lastName = lastName.Substring(0, 1).ToUpper() + lastName.Substring(1).ToLower();
但是,如果提供多个名称作为同一字符串的一部分,则需要知道如何获取信息以及
split it
因此。所以,如果你得到一个像“约翰·多伊”这样的名字,你可以根据空格字符来拆分字符串。如果它是“doe,john”这样的格式,则需要根据逗号对其进行拆分。但是,一旦将其拆分,您只需应用前面显示的代码。
8
3
12 年前
cultureInfo.currentCulture.textinfo.toTitleBase(“我的名字”);
返回~我的名字
但如前所述,类似mcfly的名字仍然存在问题。
9
3
10 年前
我用我自己的方法来解决这个问题:
例如,“你好,世界。你好,这里是StackOverflow世界。“将是”你好世界。你好,这里是StackOverflow世界。regex \b(单词的开头)将执行此操作。
///
/// Makes each first letter of a word uppercase. The rest will be lowercase
///
///
///
public static string FormatWordsWithFirstCapital(string Phrase)
{
MatchCollection Matches = Regex.Matches(Phrase, "\\b\\w");
Phrase = Phrase.ToLower();
foreach (Match Match in Matches)
Phrase = Phrase.Remove(Match.Index, 1).Insert(Match.Index, Match.Value.ToUpper());
return Phrase;
}
10
2
12 年前
使用toitlecase的建议对于全部为大写的字符串不起作用。所以你必须在第一个字符上给toupper打电话,在剩下的字符上给tolower打电话。
11
2
12 年前
这门课有技巧。可以将新前缀添加到
前缀
静态字符串数组。
public static class StringExtensions
{
public static string ToProperCase( this string original )
{
if( String.IsNullOrEmpty( original ) )
return original;
string result = _properNameRx.Replace( original.ToLower( CultureInfo.CurrentCulture ), HandleWord );
return result;
}
public static string WordToProperCase( this string word )
{
if( String.IsNullOrEmpty( word ) )
return word;
if( word.Length > 1 )
return Char.ToUpper( word[0], CultureInfo.CurrentCulture ) + word.Substring( 1 );
return word.ToUpper( CultureInfo.CurrentCulture );
}
private static readonly Regex _properNameRx = new Regex( @"\b(\w+)\b" );
private static readonly string[] _prefixes = {
"mc"
};
private static string HandleWord( Match m )
{
string word = m.Groups[1].Value;
foreach( string prefix in _prefixes )
{
if( word.StartsWith( prefix, StringComparison.CurrentCultureIgnoreCase ) )
return prefix.WordToProperCase() + word.Substring( prefix.Length ).WordToProperCase();
}
return word.WordToProperCase();
}
}
12
1
12 年前
如果使用VS2K8,则可以使用扩展方法将其添加到字符串类:
public static string FirstLetterToUpper(this String input)
{
return input = input.Substring(0, 1).ToUpper() +
input.Substring(1, input.Length - 1);
}
13
0
10 年前
为了解决本强调的一些问题,我建议先将字符串转换为小写,然后调用toitlecase方法。然后,您可以使用indexof(“mc”)或indexof(“o\”)来确定需要更具体注意的特殊情况。
inputString = inputString.ToLower();
inputString = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);
int indexOfMc = inputString.IndexOf(" Mc");
if(indexOfMc > 0)
{
inputString.Substring(0, indexOfMc + 3) + inputString[indexOfMc + 3].ToString().ToUpper() + inputString.Substring(indexOfMc + 4);
}
14
0
8 年前
我喜欢这样:
using System.Globalization;
...
TextInfo myTi = new CultureInfo("en-Us",false).TextInfo;
string raw = "THIS IS ALL CAPS";
string firstCapOnly = myTi.ToTitleCase(raw.ToLower());
15
0
8 年前
希望这对你有帮助。
String fName = "firstname";
String lName = "lastname";
String capitalizedFName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(fName);
String capitalizedLName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lName);
16
0
4 年前
public static string ConvertToCaptilize(string input)
{
if (!string.IsNullOrEmpty(input))
{
string[] arrUserInput = input.Split(' ');
// Initialize a string builder object for the output
StringBuilder sbOutPut = new StringBuilder();
// Loop thru each character in the string array
foreach (string str in arrUserInput)
{
if (!string.IsNullOrEmpty(str))
{
var charArray = str.ToCharArray();
int k = 0;
foreach (var cr in charArray)
{
char c;
c = k == 0 ? char.ToUpper(cr) : char.ToLower(cr);
sbOutPut.Append(c);
k++;
}
}
sbOutPut.Append(" ");
}
return sbOutPut.ToString();
}
return string.Empty;
}
17
-1
12 年前
正如EDG所指出的,您需要一个更复杂的算法来处理特殊的名称(这可能就是为什么许多地方强制所有内容都大写的原因)。
类似这种未经测试的C应该处理您请求的简单案例:
public string SentenceCase(string input)
{
return input(0, 1).ToUpper + input.Substring(1).ToLower;
}
C语言求姓氏首字母之和,如何在C中大写名字和姓氏的首字母?相关推荐
- 仪表图形怎么用c语言写,【单选题】仪表自控流程图中,在调节阀附近标注缩写字母“FO”表示该阀是()。
A. 风开阀
B. 风关阀
C. 故障开阀
D. 故障关阀...
[单选题]仪表自控流程图中,在调节阀附近标注缩写字母"FO"表示该阀是(). A. 风开阀 B. 风关阀 C. 故障开阀 D. 故障关阀 更多相关问题 以下常见的农林产品繁殖方法中 ...
- android人名排序,android – 如何按搜索栏中的名字和姓氏排序 – Sqlite
我有一个 Android应用程序,应该取代Android原生联系人. 我想为用户添加基于字符约束搜索用户的可能性. 例如: 这是我的联系人表: id firstName lastName 1. Smi ...
- java string 查找大写字母_java实现统计字符串中大写字母,小写字母及数字出现次数的方法示例...
本文实例讲述了java实现统计字符串中大写字母,小写字母及数字出现次数的方法.分享给大家供大家参考,具体如下: public class TestSubstring { public static v ...
- c语言 求矩阵各行元素之和
本题要求编写程序,求一个给定的m×n矩阵各行元素之和. 输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6).随后m行,每行给出n个整数,其间 以空格分隔. 输出格式: 每行输出对应矩阵行元素 ...
- (C语言)求矩阵各行元素之和
本题来自pintia.cn 题目要求 代码 测试结果图 PTA测试结果 题目要求 本题要求编写程序,求一个给定的m×n矩阵各行元素之和. 输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6). ...
- 使用c语言求1-100以内素数之和
编译器使用的loadrunner: 不使用函数: Action() {int i,j;int sum = 0;int flag; //是否为素数for (i = 2; i <= 100; i++ ...
- c语言求矩阵各行元素之和
其题目如下: 代码如下: #include<stdio.h>int main(){int m,i,j;int n;int sum;scanf("%d %d",& ...
- 如何在JavaScript中大写字符串的首字母
To capitalize the first letter of a random string, you should follow these steps: 要大写随机字符串的第一个字母,应遵循 ...
- java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法
在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu sdf zf 大同 的人 地方 反对 ...
最新文章
- Redis第一集:Windows下安装Redis和测试
- MATLAB - 为什么imshow(g,[])可以正常显示,而imshow(g)却显示空白图像?
- android 图片变量,Android开发实现ImageView加载摄像头拍摄的大图功能
- FAT AP和FIT AP 区别 (无线篇)
- Vue.js先入个门看看
- php字符串函数的运用,php中字符串比较函数使用方法
- 树链剖分边权模板spoj375
- Java 2017.11.20 杨浩宁作业
- 安装 Redis的Python客户端redis-py
- bzoj 1047 理想的正方形
- cocos2d-Lua视频教程
- 赢在微点答案专区英语_自考英语二太难?看了墨盒的单词本,保你信心满满去考试!...
- 又一起“删库”跑路:链家程序员怒删公司 9TB 数据,被判 7 年!网友:真惨~...
- 整理15款实用javascript富文本编辑器
- 5类网线,超5类网线,6类网线,超6类网线的区别
- 篮桥杯,翻硬币 (贪心)
- 【android】悬浮球
- 金三银四,我为面试所准备的面试题,不看要遭老罪喽
- windows平板找回完整的电源模式,包括高性能模式
- 你想为开源社区做贡献吗?机会来了