数组未在 C 程序中完全解析
Array not being fully parsed in C program
我正在尝试构建一个程序,该程序从输入中解析一个字符数组,然后 returns 一个格式化的省略额外的白色空格。
#include <stdio.h>
# include <ctype.h>
/* count charecters in input; 1st version */
int main(void)
{
int ch, outp=0;
char str[1000], nstr[1000];
/* collect the data string */
while ((ch = getchar()) != EOF && outp < 1000){
str[outp] = ch;
outp++;
}
for (int j = 0; j < outp-1; j++){
printf("%c",str[j]);
}
printf("\n");
for (int q = 0; q < outp-1; q++)
{
if (isalpha(str[q]) && isspace(str[q+1])){
for(int i = 0; i < outp; i++){
if (isspace(str[i]) && isspace(i+1)){
continue;
}
nstr[i] = str[i];
}
}
}
printf("\n");
printf("Formated Text: ");
for (int i = 0; i < outp-1; i++){
printf("%c", nstr[i]);
}
//putchar("\n");c
// printf("1");
return 0;
}
这是我的代码。数组永远不会被完全解析,末尾通常被省略,出现奇怪的字符并且过去的尝试产生了一个未被完全解析的数组,为什么?
这是 "the C programming language" 中的练习 1-9。
a) 在将字符从 str
复制到 nstr
时,您需要使用额外的索引变量。做一些类似 -
for(int i = 0, j = 0; i < outp -1; i++){
if (isspace(str[i]) && isspace(i+1)){
continue;
}
nstr[j++] = str[i];
}
b) 在打印 nstr
时,您使用的是原始字符串的长度 str
。 nstr
的长度将小于 str
的长度,因为您删除了空格。
你现在需要求出nstr
的长度或者在条件中使用i < strlen(nstr) -1
。
我正在尝试构建一个程序,该程序从输入中解析一个字符数组,然后 returns 一个格式化的省略额外的白色空格。
#include <stdio.h>
# include <ctype.h>
/* count charecters in input; 1st version */
int main(void)
{
int ch, outp=0;
char str[1000], nstr[1000];
/* collect the data string */
while ((ch = getchar()) != EOF && outp < 1000){
str[outp] = ch;
outp++;
}
for (int j = 0; j < outp-1; j++){
printf("%c",str[j]);
}
printf("\n");
for (int q = 0; q < outp-1; q++)
{
if (isalpha(str[q]) && isspace(str[q+1])){
for(int i = 0; i < outp; i++){
if (isspace(str[i]) && isspace(i+1)){
continue;
}
nstr[i] = str[i];
}
}
}
printf("\n");
printf("Formated Text: ");
for (int i = 0; i < outp-1; i++){
printf("%c", nstr[i]);
}
//putchar("\n");c
// printf("1");
return 0;
}
这是我的代码。数组永远不会被完全解析,末尾通常被省略,出现奇怪的字符并且过去的尝试产生了一个未被完全解析的数组,为什么? 这是 "the C programming language" 中的练习 1-9。
a) 在将字符从 str
复制到 nstr
时,您需要使用额外的索引变量。做一些类似 -
for(int i = 0, j = 0; i < outp -1; i++){
if (isspace(str[i]) && isspace(i+1)){
continue;
}
nstr[j++] = str[i];
}
b) 在打印 nstr
时,您使用的是原始字符串的长度 str
。 nstr
的长度将小于 str
的长度,因为您删除了空格。
你现在需要求出nstr
的长度或者在条件中使用i < strlen(nstr) -1
。