C 将字符串数组中的每个单词大写
所以我想创建一个代码,将字符串数组中每个单词的第一个字母大写,然后以相反的顺序输出字符串。我无法反向打印阵列,但撇开它不谈,我想到的是:C 将字符串数组中的每个单词大写,c,arrays,string,toupper,C,Arrays,String,Toupper,所以我想创建一个代码,将字符串数组中每个单词的第一个字母大写,然后以相反的顺序输出字符串。我无法反向打印阵列,但撇开它不谈,我想到的是: #include <stdio.h> #include <ctype.h> #include <string.h> int main() { char string[100]; int i, j; char newString[100]; printf("\nEnter string: "
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
char string[100];
int i, j;
char newString[100];
printf("\nEnter string: ");
gets(string);
for (i=0; i <strlen(string); i++){
if (string[i] == ' ' && isalnum(string[i+1])==1){ //if the character is preceded by a space
newString[i] = toupper(string[i+1]); //copy the uppercase of the character to newString
}
if (isalpha(string[0]) == 1){ //capitalize the first character in the string if it is a letter
newString[0] = toupper(string[0]); //copy character to newString
}else{
newString[i] = string[i];
}
}
printf("%s", newString); //preferably, the newString should be printed in reverse order, but I can't seem to do it.
}
输入“kate daniels”将返回“kate daniels”。如果输入为:
julie olsen
输出为:
julie olsenw
请帮忙(您可以使用strtok使用指定的分隔符(在本例中为空格)拆分字符串,然后在拆分单词时将第一个字符大写
char input[] = "A bird came down the walk";
printf("Parsing the input string '%s'\n", input);
char *token = strtok(input, " ");
while(token) {
puts(token);
token = strtok(NULL, " ");
}
printf("Contents of the input string now: '");
for(size_t n = 0; n < sizeof input; ++n)
input[n] ? printf("%c", input[n]) : printf("\\0");
puts("'");
char input[]=“一只鸟从人行道上下来”;
printf(“正在分析输入字符串“%s”\n”,input);
char*token=strtok(输入“”);
while(令牌){
卖出(代币);
令牌=strtok(空,“”);
}
printf(“现在输入字符串的内容:”);
用于(大小n=0;n
然后反转字符串中的所有字母
void inplace_reverse(char * str)
{
if (str)
{
char * end = str + strlen(str) - 1;
// swap the values in the two given variables
// XXX: fails when a and b refer to same memory location
# define XOR_SWAP(a,b) do\
{\
a ^= b;\
b ^= a;\
a ^= b;\
} while (0)
// walk inwards from both ends of the string,
// swapping until we get to the middle
while (str < end)
{
XOR_SWAP(*str, *end);
str++;
end--;
}
# undef XOR_SWAP
}
}
void-in-place\u反向(char*str)
{
如果(str)
{
char*end=str+strlen(str)-1;
//交换两个给定变量中的值
//XXX:当a和b引用同一内存位置时失败
#定义异或交换(a,b)do\
{\
a^=b\
b^=a\
a^=b\
}而(0)
//从绳子的两端向内走,
//交换直到我们到达中间
while(str
试试:
intmain(){
字符串[100];
int i,j;
printf(“\n输入字符串:”);
获取(字符串);
if(isalpha(string[0]){//如果字符串中的第一个字符是字母,则将其大写
字符串[0]=toupper(字符串[0]);//将字符复制到新闻字符串
对于(i=1;i我想您还没有听说过get()
是不推荐使用的,所以在本例中我使用fgets()
,但是要注意,它保留了任何尾随的换行符
。我的方法是将输入拆分为“标记”,以便在处理空格的同时处理换行符
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char string[100];
char *tptr;
size_t i, len;
printf("\nEnter string: ");
if (fgets(string, sizeof(string), stdin) == NULL)
return 1;
tptr = strtok(string, " \n\r\t");
while (tptr != NULL) {
tptr[0] = toupper(tptr[0]);
len = strlen(tptr);
for(i=0; i<len; i++)
printf("%c", tptr[len-1-i]);
tptr = strtok(NULL, " \n\r\t");
if (tptr != NULL)
printf(" ");
}
printf("\n");
return 0;
}
“A”的ascii值为65,“A”为97
所以这就是alogrithm
->accept the string ,now read the array character by character till null character
-> if(character>=97 and character<=122)
character=character-32
->now reverse the string using standard library function strrev(string)
->print it
->接受字符串,现在逐字符读取数组,直到空字符
->if(character>=97,characternow使用标准库函数strev(string)反转字符串
->打印出来
这是最简单的方法(人类逻辑:)
int main(无效){
int i,l,m,上限=1;
字符c;
char buff[]=“这是一个简单的字符串”;
l=strlen(浅黄色);
printf(“原始字符串:\n\t“%s”\n\n”,buff);
/*资本化*/
对于(i=0;iman isalpha
给出返回值:如果字符c属于测试类,返回值为非零,如果不属于测试类,返回值为零。
。因此,您无法确定isalnum(字符串[i+1])==1
是否为真
,即使它是字母数字字符。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void) {
char string[100];
char *tptr;
size_t i, len;
printf("\nEnter string: ");
if (fgets(string, sizeof(string), stdin) == NULL)
return 1;
tptr = strtok(string, " \n\r\t");
while (tptr != NULL) {
tptr[0] = toupper(tptr[0]);
len = strlen(tptr);
for(i=0; i<len; i++)
printf("%c", tptr[len-1-i]);
tptr = strtok(NULL, " \n\r\t");
if (tptr != NULL)
printf(" ");
}
printf("\n");
return 0;
}
Enter string: curran lennart
narruC tranneL
Enter string: kate daniels
etaK sleinaD
Enter string: julie olsen
eiluJ neslO
->accept the string ,now read the array character by character till null character
-> if(character>=97 and character<=122)
character=character-32
->now reverse the string using standard library function strrev(string)
->print it
int main(void){
int i,l,m,upper=1;
char c;
char buff[]="this is a simple string";
l=strlen(buff);
printf("Original string:\n\t'%s'\n\n",buff);
/*capitalize*/
for( i=0;i<l;i++){
if(upper)
buff[i]=toupper(buff[i]);
upper=isspace(buff[i]);
}
printf("Capitalized:\n\t'%s'\n\n",buff);
/*reversing*/
for(i=0;i<(l/2);i++){
c=buff[i];
buff[i]=buff[l-(i+1)];
buff[l-(i+1)]=c;
}
printf("Reversed:\n\t'%s'\n\n",buff);
return 0;
}