#include<stdio.h>
#include<string.h>
void main()
{
int i;
char str[100];
printf("Enter a string\n");
scanf("%s",str);
int ln = strlen(str);
char str2[ln][ln];
printf("enter string 2\n");
for(i=1;i<=ln;i++)
scanf("%s",str2[i]);
printf("\n____________\n");
for(i=ln;i>=1;i--)
printf("%s ",str2[i]);
}
这个程序是正确的还是我错过了它的东西,它给出了错误的输出
。
输入: - 零
Mahaveer是我的名字
预期输出: - 名字是我的mahaveer
但是输出来了: - 名字mname imanme mimname。
答案 0 :(得分:1)
问题
您认为char str2[ln];
是一个c字符串数组。但实际上它是char
的数组,可以表现为单C-string
。
解决方案
其中一个解决方案是使用char
的二维数组来表现为C字符串数组。
答案 1 :(得分:1)
在你的代码中:
char str2[ln];//this declares an array with size 4 characters, not 4 arrays with dynamic size
printf("enter string 2\n");
for(i=1;i<=ln;i++)//i should start from 0, better way to do, else we will be wasting the 1st byte
scanf("%s",&str2[i]);//%s in scanf expect char array in 2nd parameter, but &str2[i] indicates a character
printf("\n____________\n");
for(i=ln;i>=1;i--)
printf("%s ",&str2[i]);//%s says to print a character array, but the second parameter passed,&str2[i], is a character
尝试这样做,这将满足您的要求:
char str2[ln][20];//each sub array with 20 characters size
printf("enter string 2\n");
for(i=0;i<ln;i++)
{
scanf("%s",str2[i]);
}
printf("\n____________\n");
for(i=ln-1;i>=0;i--)
printf("%s ",str2[i]);
printf("\n");
答案 2 :(得分:0)
试试这个
#include <stdio.h>
#include <string.h>
int main(void){
int i, j;
char str[100];
char *words[50], *word;
printf("Input :- \n");
fgets(str, sizeof str, stdin);
strlwr(str);//convert to lowcase
i = 0;
word = strtok(str, " \t\n");//split to word
while(word){
words[i++] = word;
word = strtok(NULL, " \t\n");
}
#if 0
//swap head and tail
if(i){
word = words[i-1];
words[i-1] = words[0];
words[0] = word;
}
for(j = 0; j < i; ++j){
if(j)
putchar(' ');
printf("%s", words[j]);
}
#else
//reverse word
for(j = i-1; j >= 0; --j){
printf("%s", words[j]);
if(j)
putchar(' ');
}
#endif
puts("");
return 0;
}