我正在尝试学习C,在这里我得到了一个程序,我们必须将用户的输入作为n个字符串字符串,比较它并按字母顺序排列。按字母顺序排列后,我只需要打印订单中出现的姓氏。
以下是上述问题的代码:
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,m,n,len;
char a[50][50],temp[100];
char last ;
printf("Enter the number of elements you wish to order : ");
scanf("%d",&m);
printf("\nEnter the names :\n");
for (i=0;i<m;i++){
scanf("%s",a[i]);
}
for (i=0;i<m;i++){
for (j=i+1;j<m+1;j++) {
if (strcmp(a[i],a[j])>0) {
strcpy(temp,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],temp);
}
}
}
printf("\n\nSorted strings are : ");
for (i=0;i<m+1;i++){
printf("%s \n",a[i]);
}
return 0;
}
〜
答案是这样的:
输入您要订购的元素数量:4
输入名称: 领土 状态 你好 像
分类字符串是:S $ ??? 你好 喜欢 状态 境
我的问题是,为什么我会得到&#34; S $ ???&#34;而且我只想要最后一个字&#34;领土应该打印出来并不是所有的名字&#34;。
任何人都可以让我知道我哪里错了吗?这将是一个很大的帮助。
由于 坦尼亚
答案 0 :(得分:2)
您正在使用索引m+1
对[0..m]
个字符串进行排序。但是您只输入m
个字符串。
您的索引不应超过m-1
。
答案 1 :(得分:0)
\检查此代码
在您的代码中,您输入为4
然后
一个[0] =领土
一个[1] =状态
一个[2] =你好
[3] =像
但是你的代码最多运行3次上循环,然后i = 3
在下一个循环中,j = i + 1,然后j = 4
但是[4] =不存在
这就是为什么&#34; S $ ???&#34;发生
解决方案:
#include<stdio.h>
#include<string.h>
int main() {
int i, j, m, n, len;
char a[50][50], temp[100];
char last;
printf("Enter the number of elements you wish to order : ");
scanf("%d", &m);
printf("\nEnter the names :\n");
for (i = 0; i < m; i++) {
scanf("%s", a[i]);
}
for (i = 0; i < m - 1; i++) { // m - 1 enough maximum i = 2;
for (j = i + 1; j < m; j++) { // j maximum j = i + 1 j = 3
if (strcmp(a[i], a[j]) > 0) {
strcpy(temp, a[i]);
strcpy(a[i], a[j]);
strcpy(a[j], temp);
}
}
}
printf("\n\nSorted strings are : "); // print all words in sorted order
for (i = 0; i < m; i++) {
printf("%s \n", a[i]);
}
printf("Last Word:\n");
printf("%s\n", a[m - 1]); // a[3] contains last name
return 0;
}
答案 2 :(得分:0)
这是我在turbo c ++中为我工作的程序
#include<conio.h>
#include<iosream.h>
#include<ctype.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{
clrscr();
char name[100];
int c=0;
// to take the name including spaces
gets(name);
//this line is to print the first character of the name
cout<<name[0];
//this loop is to print the fist character which is there after every space
for(int l=0;name[l]!='\0';l++)
{
if(name[l]==' ')
{
cout<<"."<<name[l+1];
//l+1 is used because l is the space and l+1 is the character that we need
}
}
//this loop is to find out the last space in the entire sting
for(int i=0;name[i]!='\0';i++)
{
if(name[l+1]==NULL)
{
//here we fond the last space in the string
for(int j=i;name[j]!=' ';j--)
{
c=j+1;
}
// c=j+1 is used bacause we have already taken the first letter of the that word
//no need of taking it again
}
}
//this loop starts from the last space and the position(of space) is stored in k
for(int k=c;name[k]!='\0';k++)
{
cout<<name[k];
}
getch();
}
输出:
antt ranjan shukla