c语言 - 2D 字符串数组在遇到具有多个空格或数字的单词时存储''



我对C编程很陌生。我的程序应该接受一个字符串并将其移动到 2D 数组中。单词要么用空格分隔,要么用数字分隔。如果有一个空格或数字分隔它,这工作得很好。但是,一旦有多个,它就会开始向我的数组添加"\0"。

//Move the string into a 2D array
for(i = 0; i < total + 1; i++)
{
if(isalpha( *(tempString + i) ))
{
sortingArray[n][j++] = tempString[i];
input++;
}
else
{
sortingArray[n][j++] = '';
n++;
j = 0;
}
if(tempString[i] == '')
break;
}

这是发生的情况的示例(n = 放置的行数)

./a.out "One More Way">

5 个输入

以前

更多

道路

更多

道路

您需要跳过连续的分隔符:

for(i = 0; i < total; i++)
{
if(isalpha(tempString[i]))
{
sortingArray[n][j] = tempString[i];
++j;
++input;
}
else
{
// skip consecutive delimiters
while (i < total && !isalpha(tempString[i]))
++i;
sortingArray[n][j] = '';
++j
++n;
j = 0;
}    
}

免责声明:未经编译器验证。小心!

我还冒昧地对您的原始代码进行了一些改进。

检查
  • 是否有字符串的长度是没有意义的。
  • *(tempString + i)更改为清除tempString[i]
  • 将增量从较大的表达式移到其自己的完整表达式中。这样更清楚。

这是一个简单的逻辑故障,调试器非常适合识别。

想象一下,你有字符串"hello world"。

它可以轻松地将"hello"存储到sortingArray[0]中。当它到达第一个空格时,它会递增n并开始寻找下一个单词。但是它找到的下一个字符是另一个空格,因此它再次递增n

需要对逻辑稍作更改

if(isalpha( *(tempString + i) ))
{
sortingArray[n][j++] = tempString[i];
input++;
}
else if(j>0)
{
sortingArray[n][j++] = '';
n++;
j = 0;
}

现在,如果前一个字符是字母(由于j大于 0),则代码只会递增n。否则,如果它不在乎并将继续前进。

您还应该检查循环后j是否为非零,因为这意味着 sortingArray 中有一个新条目需要添加NUL

还有一件事需要注意的是,你做for循环的方式有点奇怪。你有这个

for(i = 0; i < total + 1; i++)

但这也是循环内部的

if(tempString[i] == '')
break;

通常,终止for循环的方法是像这样编写它

for(i = 0; tempString[i]!=''; i++)

这样,您首先不关心字符串的长度,但是当它命中 NUL 字符时,循环将结束。

最新更新