在C语言中有运行时错误
我和我的朋友通过从互联网上捕获算法为C编写了一个代码。我们的程序运行良好,但在某些情况下,我们的长代码会出现运行时错误。你能帮我把代码缩短一点吗? 此代码捕获带有大写和小写字母的名称,并将单词的第一个字母转换为大写,将其他字母转换为小写。首先,我们应该给出我们想要输入的名字的编号在C语言中有运行时错误,c,algorithm,C,Algorithm,我和我的朋友通过从互联网上捕获算法为C编写了一个代码。我们的程序运行良好,但在某些情况下,我们的长代码会出现运行时错误。你能帮我把代码缩短一点吗? 此代码捕获带有大写和小写字母的名称,并将单词的第一个字母转换为大写,将其他字母转换为小写。首先,我们应该给出我们想要输入的名字的编号 #include <stdio.h> #include <ctype.h> int ch, i,n,tool[100]; int main() { int k, j , i;
#include <stdio.h>
#include <ctype.h>
int ch, i,n,tool[100];
int main()
{
int k, j , i;
char sentence[100][100];
scanf("%d",&n);
for(k=0;k<n+1;k++) {
for (i = 0; (sentence[k][i] = getchar()) != '\n'; i++) {
;
}
sentence[k][i] = '\0';
tool[k]=i;
ch=toupper(sentence[k][0]);
sentence[k][0]=ch;
for (j = 1; j < i; j++) {
if(sentence[k][j-1]==' ')
ch=toupper(sentence[k][j]);
else
ch=tolower(sentence[k][j]);
sentence[k][j]=ch;
}
}
for(i=0;i<n+1;i++) {
for(j=0;j<tool[i];j++) {
ch=sentence[i][j];
putchar(ch);
}
printf("\n");
}
return 0;
}
#包括
#包括
int ch,i,n,tool[100];
int main()
{
int k,j,i;
字句[100][100];
scanf(“%d”和“&n”);
对于(k=0;k,这里有一个可测量地更短的函数。并且以方便的函数形式:
#include <stdio.h>
/** convert string to sentence case.
* returns string with initial cap and single i converted to uppercase.
*/
char *str2sentence (char *str)
{
if (!str) return NULL;
char *p = str;
if ('a' <= *p && *p <= 'z') /* convert first to upper */
*p -= 32;
p++;
for ( ; *p; p++) /* convert remaining to lower, except a single 'i' to upper 'I' */
{
if (*(p - 1) == 0x20 && *(p + 1) == 0x20)
{
if (*p == 'i')
*p -= 32;
else
if ('A' <= *p && *p <= 'Z' && *p != 'I')
*p += 32;
}
else
if ('A' <= *p && *p <= 'Z')
*p += 32;
}
return str;
}
int main (void) {
char *str = NULL;
printf ("\n Enter a string to convert to sentence case ([enter] to quit)\n");
while (printf ("\n input : ") && scanf ("%m[^\n]%*c", &str) == 1)
printf (" result: %s\n", str2sentence (str));
return 0;
}
你可以试试这个
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char *array[100],*p;
int i=0,j,n,k;
scanf("%d",&n);
for (n=n+1 ; n > 0 ; n--) { p=(char *)malloc(100);
array[i++]=p;
for (k=0; (*p=getchar()) != '\n' && *p !=EOF ;p++, k++); *p='\0';
for ( p=p-k; *p !='\0'; p++) {
if (isspace(*p) )
continue;
*p=toupper(*p); p++;
for( ; *p!=' ' && *p!='\0' ;p++ )
*p=tolower(*p);
if ( *p=='\0' ) p--;
}
}
for (j=0; j<i ; j++)
printf("%s\n",array[j]);
}
#包括
#包括
#包括
main()
{
字符*数组[100],*p;
int i=0,j,n,k;
scanf(“%d”和“&n”);
对于(n=n+1;n>0;n--){p=(char*)malloc(100);
数组[i++]=p;
对于(k=0;(*p=getchar())!='\n'&&&&&*p!=EOF;p++,k++);*p='\0';
对于(p=p-k;*p!='\0';p++){
如果(isspace(*p))
继续;
*p=toupper(*p);p++;
对于(;*p!=''&&*p!='\0';p++)
*p=耐受力(*p);
如果(*p=='\0')p--;
}
}
对于(j=0;j试试这个.)
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
char *name,*backup_addr, **name_array;
int i,n,j;
main()
{
char c;
scanf("%d",&n);
name_array=malloc(sizeof(char)*1000);
for(i=0;i<n;i++)
{
name_array[i]=malloc(sizeof(char));
backup_addr=name=malloc(sizeof(char*));
while(isspace(c=getchar()));
if(isalpha(c))
{
*name++=toupper(c);
for(j=0;(isalpha(c=getchar()))!='\n'&&c!='\n';j++,name++)
*name=tolower(c);
}
*name='\0';
name=backup_addr;
name_array[i]=name;
}
for(i=0;i<n;i++)
printf("%s\n",name_array[i]);
}
#包括
#包括
#包括
字符*名称,*备份地址,**名称\数组;
int i,n,j;
main()
{
字符c;
scanf(“%d”和“&n”);
name_array=malloc(sizeof(char)*1000);
对于(i=0;i)程序失败的某些输入是什么?我不知道,因为我们必须将此代码上传到服务器中,它会对其进行测试并给我们评分,但它有一些测试用例存在运行时错误,因此它会降低我们的评分,并且不会说明哪些测试用例存在运行时错误(可能输入行超过100个字符?或者可能输入行超过100个?我认为他们的代码不超过100个字符。我必须缩短此代码,但输出相同。您能帮忙吗?非常感谢您的帮助。但我们不能在此代码中使用string.h。您能再次更改它吗?您可以将其用于我已经把它改成了ctype.h,它成功了。非常感谢Karthikeyan.R.S。我也是亚洲人。我们可以成为朋友吗?这里我们不能有友谊。请把我加入facebook。facebook.com/lordmh
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
char *name,*backup_addr, **name_array;
int i,n,j;
main()
{
char c;
scanf("%d",&n);
name_array=malloc(sizeof(char)*1000);
for(i=0;i<n;i++)
{
name_array[i]=malloc(sizeof(char));
backup_addr=name=malloc(sizeof(char*));
while(isspace(c=getchar()));
if(isalpha(c))
{
*name++=toupper(c);
for(j=0;(isalpha(c=getchar()))!='\n'&&c!='\n';j++,name++)
*name=tolower(c);
}
*name='\0';
name=backup_addr;
name_array[i]=name;
}
for(i=0;i<n;i++)
printf("%s\n",name_array[i]);
}