我目前在添加等号时遇到问题,在我的字符串被拆分为令牌之前和之后。它让我得出结论,我必须在拆分字符串之后用我想要的等号替换换行符。我已经尝试查看c string.h库引用,看看是否有办法用strstr替换换行符,以查看标记化字符串中是否已经存在“\ n”,但是遇到了我试过的时候是一个无限循环。我还想过尝试替换换行符,这个字符应该是字符串长度减去1,我承认,我对C的熟悉程度很低。如果你能看一下我的代码,并提供一些反馈,我会非常感激它。感谢您的时间。我承认我对C的熟悉程度不高,但我现在正在阅读参考库。
// main method
int main(void){
// allocate memory
char string[256];
char *tokenizedString;
const char delimit[2] = " ";
const char *terminate = "\n";
do{
// prompt user for a string we will tokenize
do{
printf("Enter no more than 65 tokens:\n");
fgets(string, sizeof(string), stdin);
// verify input length
if(strlen(string) > 65 || strlen(string) <= 0) {
printf("Invalid input. Please try again\n"); }
} while(strlen(string) > 65);
// tokenize the string
tokenizedString = strtok(string, delimit);
while(tokenizedString != NULL){
printf("=%s=\n", tokenizedString);
tokenizedString = strtok(NULL, delimit);
}
// replace newline character implicitly made by enter, it seems to be adding my newline character at the end of output
} while(strcmp(string, "\n"));
return 0;
}// end of method main
输出:
Enter no more than most 65 tokens:
i am very tired sadface
=i=
=am=
=very=
=tired=
=sadface
=
期望的输出
Enter no more than 65 tokens:
i am very tired sadface
=i=
=am=
=very=
=tired=
=sadface=
答案 0 :(得分:2)
由于您使用的是strlen()
,因此您可以执行此操作
size_t length = strlen(string);
// Check that `length > 0'
string[length - 1] = '\0';
优点:
这样您只需拨打strlen()
一次。无论如何,为同一个字符串多次调用它是无效的。
您始终从输入字符串中删除跟踪'\n'
,以便您的标记化工作正常运行。
注意:strlen()
永远不会返回值&lt; 0 ,因为它的作用是计算字符串中的字符数,""
和&gt;只计算0。 0 否则。
答案 1 :(得分:1)
嗯,你有两种方法可以做到,最简单的方法是在令牌分隔符字符串中添加import 'pre.js'; import 'bundle.js'; import 'after.js'
evaluate
(如果要使用字符串文字初始化字符串数组,则不需要使用数组大小)
因此它消除了输入中的最终#include <utility>
#include <type_traits>
struct matrix {};
struct matrix_add {
matrix operator()() const;
};
matrix_add operator + (matrix const& a, matrix const& b);
template<class T> decltype(auto) evaluate(T&& val) { return std::forward<T>(val); }
matrix evaluate(matrix_add const& lazy) { return lazy(); }
matrix evaluate(matrix_add & lazy) { return lazy(); }
matrix evaluate(matrix_add && lazy) { return lazy(); }
int main()
{
auto a = matrix();
auto b = matrix();
auto c = evaluate(a + b);
auto d = evaluate(1 + 2);
static_assert(std::is_same<decltype(c), matrix>::value, "");
static_assert(std::is_same<decltype(d), int>::value, "");
}
。另一种方法是在读取时搜索它并从输入字符串中删除它。您也可以将\n
用于此目的:
const char delimit[] = " \n";