嘿,我对编程非常陌生并且遇到阵列问题。有人可以帮助我完成这个项目。 " c编程现代方法:修改一个反转句子单词的程序,以便在读取句子时将单词存储在二维char数组中,数组的每一行存储一个单词。假设句子不超过30个单词,并且单词长度不超过20个字符。请务必在每个单词的末尾存储一个空字符,以便可以将其视为字符串" (我也不知道它对空字符的看法)。 这是我的尝试,但它不起作用。我觉得我很接近。
#include <stdio.h>
#define MAX_SENTENCE_LEN 80
#define SENTENCE_MAX 30
#define WORD_MAX 20
int main(void)
{
char ch, sentence[MAX_SENTENCE_LEN] = {' '}, terminator = '.';
int n, i, j, start, finish;
printf("Enter a sentence: ");
for (n = 1; n < MAX_SENTENCE_LEN; n++) {
ch = getchar();
if (ch == '.' || ch == '?' || ch == '!') {
terminator = ch;
break;
}
sentence[n] = ch;
}
printf("Reversal of sentence:");
finish = n;
for (start = finish - 1; start >= 0; start--) {
if (sentence[start] == ' ') {
for (i = start; i < finish; i++)
putchar(sentence[i]);
finish = start;
}
{
int sentence[SENTENCE_MAX][WORD_MAX];
int word[30][20];
for (i=0; i< SENTENCE_MAX;i++){
for (j=0; j<WORD_MAX; j++)
sentence[i][j]=-1;
}
}
}
printf("%c\n", terminator);
return 0;}
我写了一个新代码,我认为它更接近我想要的但它仍然不会运行。我有一个错误的编译器或什么? 无论如何这里是新代码
#include<stdio.h>
#define N 100
int main (void)
{
char sentence[N][N], ch, termChar;
int i = 0, l = 0, count = 0;
int j = 0, k, start, finish, word;
printf("enter a sentence: ");
while (ch = getchar())
{
sentence[i][l++]= ch;
if (ch == ' ')
{
sentence[i][l] = '\0';
i++;
l = 0;
count++;
}
if (ch == '.' || ch == '!' || ch == '?')
{
sentence[i][l-1]= ' ';
sentence[i][l]= '\0';
termChar = ch;
count ++;
break;
}
}
for(i=count ; i>=0; i--)
printf("%s ", sentence[i]);
printf("%c\n", termChar);
return 0;
}
答案 0 :(得分:3)
您的代码在我的环境中完美运行(Windows,C99编译器,32位版本)。我输入了一个简短的句子,它颠倒了它:
关于 :我没有得到关于空字符的说法
C字符串由空字符定义:\ 0,位于char数组的末尾。示例char string [] =“word”如下所示:| w | o | r | d | \ 0 |在记忆中。
没有\0
,它只是一个char数组,而不是一个字符串,因此不能在任何字符串函数中使用,例如strcpy()
,strlen()
,等。
顺便说一句,sentence
创建和初始化:
char sentence[MAX_SENTENCE_LEN] = {' '};
不保证char数组的整个长度的内容
这可能是您的环境未运行代码的原因,而我的环境确实如此。
根据编译器,操作系统和其他随机因素,sentence
可以填充任何内容。因此,如果您的代码未在您的计算机上运行,则可能只需要将sentence
初始化为\0
。用以下代码替换该行:
char sentence[MAX_SENTENCE_LEN]; //create
memset(sentence, 0 ,MAX_SENTENCE_LEN); //zero all memory
sentence[0]=' '; //set first char to a space (' '). (not sure why)
同样偶然的是,如果用户输入结果为字符串长度== MAX_SENTENCE_LEN,那么您的程序将崩溃,因为sentence
中只有足够的空间用于MAX_SENTENCE_LEN-1 + \0
。
答案 1 :(得分:0)
#include <stdio.h>
#define MAX_SENTENCE_LEN 80
#define SENTENCE_MAX 30
#define WORD_MAX 20
int main(void){
char ch, sentence[MAX_SENTENCE_LEN] = {' '}, terminator = '.';
int n, i, j, start, finish;
char word[SENTENCE_MAX][WORD_MAX+1];
int wc=0, wcc=0;
printf("Enter a sentence: ");
for (n = 1; n < MAX_SENTENCE_LEN; n++) {
ch = getchar();
if (ch == '.' || ch == '?' || ch == '!') {
terminator = ch;
break;
} else if(ch != ' '){
word[wc][wcc++] = ch;
} else if(ch == ' '){//this is assumed to be one space between words.
word[wc++][wcc] = '\0';//null character
wcc = 0;
}
sentence[n] = ch;
}
word[wc++][wcc] = '\0';
printf("Reversal of sentence:");
finish = n;
for (start = finish - 1; start >= 0; start--) {
if (sentence[start] == ' ') {
for (i = start; i < finish; i++)
putchar(sentence[i]);
finish = start;
}
}
printf("%c\n", terminator);
for(i=wc-1;i>=0;--i){
printf("%s", word[i]);
if(i>0)
putchar(' ');
}
printf("%c\n", terminator);
return 0;
}